Scala - Mutable线程安全集合

时间:2013-07-09 06:24:06

标签: multithreading scala collections map thread-safety

我需要一个可变线程安全Map和Scala中的一个可变线程安全List。我知道默认情况下不可变集合是线程安全的。但是,我需要经常更新我的集合,因为我不能使用不可变的。此外,我需要我的线程安全可变Map来维护插入顺序。

现在正在使用下面的地图

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

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

2 个答案:

答案 0 :(得分:17)

  1. You're duplicating topics....
  2. 正如AlexIv in his answer所提到的,如果你想要线程安全,你可以混入一个特性。还有另一种方式:

    val synchronizedMap = new scala.collection.mutable.LinkedHashMap[String, Any]() with scala.collection.mutable.SynchronizedMap[String, Any]
    
  3. 那应该给你map with synchronization on each access。容易,但可能不符合性能要求。如果是这样,可能更容易创建一个扩展LinkedHashMap的自定义类,混合concurrent.Map trait (as was suggested)并提供相关方法的实现,即:putIfAbsentremove replace(2次重载)。

答案 1 :(得分:13)

对于那些在2018年或之后出现的人的快速暗示:

import java.util.concurrent.ConcurrentHashMap

val m: ConcurrentHashMap[String,MyClass] = new ConcurrentHashMap