我需要一個可變的線程安全Map和一個可變的線程安全List在Scala中。我知道不可變集合默認是線程安全的。但是,我需要經常更新我的集合,因爲我無法使用不可變的。此外,我需要我的線程安全可變Map來維護插入順序。Scala - 可變線程安全集合
現在我用下面
val map = scala.collection.mutable.LinkedHashMap[String,Any]()
地圖這張地圖保持插入順序,是可變的。我如何使它線程安全?
我需要一個可變的線程安全Map和一個可變的線程安全List在Scala中。我知道不可變集合默認是線程安全的。但是,我需要經常更新我的集合,因爲我無法使用不可變的。此外,我需要我的線程安全可變Map來維護插入順序。Scala - 可變線程安全集合
現在我用下面
val map = scala.collection.mutable.LinkedHashMap[String,Any]()
地圖這張地圖保持插入順序,是可變的。我如何使它線程安全?
正如由AlexIv in his answer提到,有一個特點,如果你想線程安全的,你可以混合英寸還有,雖然另一種方式:
val synchronizedMap = new scala.collection.mutable.LinkedHashMap[String, Any]() with scala.collection.mutable.SynchronizedMap[String, Any]
這應該給你的map with synchronization on each access。很簡單,但可能不符合性能要求。如果是這樣,創建一個擴展LinkedHashMap
的自定義類可能更容易,在concurrent.Map
trait (as was suggested)中混合並提供相關方法的實現,即:putIfAbsent
,remove
replace
(2重載)。
[線程安全地圖其保留了插入順序(http://stackoverflow.com/questions/17540467/thread-safe-map-which-preserves-the-insertion-order)的可能重複 – 4lex1v
@AlexIv不是完全意義上的副本 - rahul問太多列表 –
@ om-nom-nom無論如何它可以被修改,但創建一個新的問題是多餘的 – 4lex1v