Scala - коллективные коллекции с надежной резьбой

Мне нужна изменчивая потокобезопасная карта и измененный потокобезопасный список в Scala. Я знаю, что неизменяемые коллекции по умолчанию являются потокобезопасными. Но мне нужно обновлять свои коллекции очень часто, из-за которых я не мог использовать неизменяемый. Кроме того, мне нужна моя файловая измененная Map для поддержания порядка вставки.

Сейчас я использую карту ниже

val map = scala.collection.mutable.LinkedHashMap[String,Any]()

Эта карта поддерживает порядок вставки и изменена. Как сделать его потокобезопасным?

Ответы

Ответ 1

  • Вы дублируете темы....
  • Как было сказано AlexIv в своем ответе, есть черта, с которой вы можете смешиваться, если хотите безопасность потоков. Там другой способ:

    val synchronizedMap = new scala.collection.mutable.LinkedHashMap[String, Any]() with scala.collection.mutable.SynchronizedMap[String, Any]
    

Это должно дать вам карту с синхронизацией при каждом доступе. Легко, но может не соответствовать требованиям к производительности. Если это так, возможно, было бы легче создать пользовательский класс, расширяющий LinkedHashMap, смешивая в concurrent.Map признак (как было предложено) и обеспечить реализацию соответствующих методов, например: putIfAbsent, remove replace (2 перегрузки).