yAs*_*AsH 19 collections multithreading scala map thread-safety
我需要一个可变线程安全Map和Scala中的一个可变线程安全List.我知道默认情况下不可变集合是线程安全的.但是,我需要经常更新我的集合,因为我不能使用不可变的.此外,我需要我的线程安全可变Map来维护插入顺序.
现在我正在使用下面的地图
val map = scala.collection.mutable.LinkedHashMap[String,Any]()
Run Code Online (Sandbox Code Playgroud)
此映射维护插入顺序并且是可变的.如何使其线程安全?
Pat*_*iek 19
正如AlexIv在他的回答中所提到的,如果你想要线程安全,你可以混合使用一个特性.还有另一种方式:
val synchronizedMap = new scala.collection.mutable.LinkedHashMap[String, Any]() with scala.collection.mutable.SynchronizedMap[String, Any]
Run Code Online (Sandbox Code Playgroud)这应该为您提供每次访问同步的地图.容易,但可能不符合性能要求.如果是这样,创建一个自定义类可能更容易扩展LinkedHashMap
,混合concurrent.Map
特征(如建议的那样)并提供相关方法的实现,即:putIfAbsent
,remove
replace
(2个重载).
aka*_*ppi 18
快速提示2018年或之后的人们:
import java.util.concurrent.ConcurrentHashMap
val m: ConcurrentHashMap[String,MyClass] = new ConcurrentHashMap
Run Code Online (Sandbox Code Playgroud)