не полный ответ на ваш вопрос, но ...
либо 1 или 2 в вашем вопросе не будет пригодным для многопоточной среды - val
s с неизменными данными структуры. Для многопоточного доступа к изменяемым коллекциям я по-прежнему рекомендую коллекции Java из пакета java.util.concurrent
. Например, для создания изменчивой, параллельная хэш-карты:
def emptyConcurrentHashMap[K, V] = {
import collection.JavaConverters._
new java.util.concurrent.ConcurrentHashMap[K, V].asScala
}
Вы все еще получаете более идиоматический Scala Accessors, как это, и вы будете использовать специальные атомные методы мутаторных (как def putIfAbsent(k: A, v: B): Option[B]
и def replace(k: A, oldvalue: B, newvalue: B): Boolean
).
В качестве альтернативы вы можете использовать AtomicReference
, который содержит неизменяемую коллекцию, и замените его на свой метод compareAndSet
.