27

我需要一个可变线程安全的 Map 和一个可变线程安全的 Scala 列表。我知道不可变集合默认是线程安全的。但是,我需要经常更新我的收藏,因为我不能使用不可变的。我还需要我的线程安全可变 Map 来维护插入顺序。

现在正在使用下面的地图

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

此映射维护插入顺序并且是可变的。如何使其线程安全?

4

2 回答 2

40

给那些在 2018 年或之后的人提供的快速提示:

import java.util.concurrent.ConcurrentHashMap

val m: ConcurrentHashMap[String,MyClass] = new ConcurrentHashMap
于 2018-04-06T09:32:37.170 回答
22
  1. 你在重复主题....
  2. 正如AlexIv 在他的回答中提到的那样,如果你想要线程安全,你可以混合使用一个特性。不过还有另一种方式:

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

这应该为您提供每次访问时同步的地图。简单,但可能无法满足性能要求。如果是这样,可能更容易创建一个扩展的自定义类LinkedHashMap,混合concurrent.Map特征(如建议的那样)并提供相关方法的实现,即:putIfAbsentremove replace(2个重载)。

于 2013-07-09T07:11:19.050 回答