我的Scala应用程序中需要一个简单的线程安全的内存缓存。
我需要一个支持scala.collection.mutable.MapLike
def getOrElseUpdate(key: A, op: => B)
我希望这个操作是原子的。这个操作在scala.collection.concurrent.TrieMap
中是原子的吗?或者我应该使用其他一些数据结构?
我使用Scala 2.10,但很快就会升级到2.11。
我不想使用scala.collection.mutable.SynchronizedMap
,因为它在Scala 2.11中已弃用。
答案 0 :(得分:4)
TrieMap适用于此类案例
并发hash-trie或TrieMap是一个并发线程安全的无锁实现的哈希数组映射trie。
TrieMap中的getOrElseupdate
可以使用线程安全。所以是的,你应该使用它。根据{{3}},当插入率非常高时,triemap实际上很棒。虽然差别很难被观察到。
答案 1 :(得分:1)
唉,TrieMap
没有覆盖getOrElseUpdate
,这使得此方法不线程安全。