在Scala应用程序中,我需要一个简单的线程安全内存缓存。
我需要一个支持scala.collection.mutable.MapLike操作的数据结构
def getOrElseUpdate(key: A, op: => B)我希望这个操作是原子化的。这个操作在scala.collection.concurrent.TrieMap中是原子的吗?还是应该使用其他数据结构?
我使用Scala2.10,但可能很快就会升级到2.11。
我不想使用scala.collection.mutable.SynchronizedMap,因为它在Scala2.11中是不推荐的。
发布于 2014-09-16 12:10:09
TrieMap适用于这种情况。
并发散列或TrieMap是哈希数组映射的trie的并发线程安全无锁实现。
而getOrElseupdate在TrieMap中是线程安全的使用。所以是的你应该用它。根据这,当插入率真的很高时,triemap实际上是很棒的。虽然这种差别很难观察到。
发布于 2015-02-03 10:31:56
唉,TrieMap没有覆盖getOrElseUpdate,这使得这个方法不线程安全。
https://stackoverflow.com/questions/25867812
复制相似问题