-1
ConcurrentHashMap
允許從多個線程Map
元素conurrent修改,而不需要阻止他們,但HashMap
阻止它的整個HashMap
對象,而不是元素以ConcurrentHashMap
吧?的ConcurrentHashMap和線程
但是如果一個線程將ConcurrentHashMap
的計數設置爲10,同時另一個線程從該線程中刪除一個項目會如何呢?那麼第一個線程數變成錯誤的權利?
ConcurrentHashMap
允許從多個線程Map
元素conurrent修改,而不需要阻止他們,但HashMap
阻止它的整個HashMap
對象,而不是元素以ConcurrentHashMap
吧?的ConcurrentHashMap和線程
但是如果一個線程將ConcurrentHashMap
的計數設置爲10,同時另一個線程從該線程中刪除一個項目會如何呢?那麼第一個線程數變成錯誤的權利?
您的問題的答案是在最自然的地方,爲ConcurrentHashMap
javadocs。
見下文:
檢索操作(包括get)通常不會阻塞,因此,可能與更新操作交迭(包括put和remove)。 檢索結果反映了最近完成的更新操作的結果,其發生時間爲。對於putAll和clear等集合操作,併發檢索可能反映插入或刪除僅某些條目。類似地,Iterator和Enumerations在迭代器/枚舉創建時或之後返回反映哈希表狀態的元素。他們不會拋出ConcurrentModificationException。但是,迭代器被設計爲一次只能由一個線程使用。
是的。在第二個線程修改了HashMap之後,第一個線程得到的計數變爲false。所以你不應該兌現它。只要使用方法,每次需要時都可以得到它。 – Petr
'HashMap塊'實際上它並不是線程安全的。如果地圖是隻讀的,這是可以的,但如果可以更改則不行。 –