2017-08-08 33 views
0

它说scala TrieMap在遍历TrieMap时会产生一个consistent迭代器,我不明白consistent这里的真正含义。scala TrieMap和Java之间有什么区别ConcurrentHashMap

我需要一个集合来构建一个对象池,也就是说,池中的对象将被同时借用/释放,同时,一个预定的线程将迭代这个集合,并检查是否存在过时的对象,如果有,则创建一个新的并从集合中删除旧的。

我在评估scala TrieMap是否可以用作游泳池。

另外,有人可以显示一些代码来说明scala TrieMapJava ConcurrentHashMap之间的区别吗?

+0

>我不明白这里是一致的真正含义。 以下问题具有“一致”迭代器的详细信息: https://stackoverflow.com/questions/29499381/what-is-a-triemap-and-what-is-its-advantages-disadvantages-compared-to- a-hashmap – FabFlying

+0

一致的迭代器意味着它可以在请求快照或迭代器的位置提供'TrieMap'的快照。如果你阅读从ConcurrentHashMap获得的保证,它会说:* Iterators和Enumerations返回反映哈希表**在创建迭代器/枚举***的某个时刻的状态**,米不知道是你想要的。而且,'TrieMap'上的迭代器应该非常快速地检索(O(1))。 –

回答

0

我遇到的两者之间的一个区别是TrieMap.getOrElseUpdate可能会多次运行提供的操作(尽管每个线程最多调用一次),但ConcurrentHashMap.computeIfAbsent会执行一些锁定以确保它只在所有线程上运行一次。

你可以试试下面的代码:

(0 to 1000) map { _ => 
    Future { 
    Thread.sleep(100) 
    map.getOrElseUpdate(1, { 
     Thread.sleep(100) 
     counter.incrementAndGet() 
    }) 
    } 
} 

,计数器很可能不是1,但与concurrentHashMap试过为1

相关问题