2017-08-08 145 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

相關問題