2013-01-17 106 views
-1

ConcurrentHashMap允許從多個線程Map元素conurrent修改,而不需要阻止他們,但HashMap阻止它的整個HashMap對象,而不是元素以ConcurrentHashMap吧?的ConcurrentHashMap和線程

但是如果一個線程將ConcurrentHashMap的計數設置爲10,同時另一個線程從該線程中刪除一個項目會如何呢?那麼第一個線程數變成錯誤的權利?

+2

是的。在第二個線程修改了HashMap之後,第一個線程得到的計數變爲false。所以你不應該兌現它。只要使用方法,每次需要時都可以得到它。 – Petr

+0

'HashMap塊'實際上它並不是線程安全的。如果地圖是隻讀的,這是可以的,但如果可以更改則不行。 –

回答

2

您的問題的答案是在最自然的地方,爲ConcurrentHashMap javadocs。

見下文:

檢索操作(包括get)通常不會阻塞,因此,可能與更新操作交迭(包括put和remove)。 檢索結果反映了最近完成的更新操作的結果,其發生時間爲。對於putAll和clear等集合操作,併發檢索可能反映插入或刪除僅某些條目。類似地,Iterator和Enumerations在迭代器/枚舉創建時或之後返回反映哈希表狀態的元素。他們不會拋出ConcurrentModificationException。但是,迭代器被設計爲一次只能由一個線程使用。

相關問題