我正在經歷ConcurrentHashMap
和this related tutorial,並且有一些問題。關於併發hashmap的內部工作
在這篇文章中,有人提到,
ConcurrentHashMap
允許多個讀者沒有任何阻擋同時讀取。這是通過將Map分成基於併發級別的不同部分以及在更新過程中僅鎖定一部分Map來實現的。缺省併發級別爲16,因此Map分爲16部分,每部分由不同的鎖定進行管理。這意味着,16個線程可以同時在Map上操作,直到它們在Map的不同部分上運行。儘管保持了線程安全性,但這使得ConcurrentHashMap
具有高性能。雖然,它帶有一個警告:這樣以來put()
,remove()
,putAll()
或clear()
更新操作不同步,併發檢索可能不反映在地圖上另外一點,文章中也提到了最近的變化: 另一個要記住的重點是對CHM的迭代,由
keySet
返回的迭代器是弱一致的,它們只反映ConcurrentHashMap
的狀態,並不一定反映任何最近的變化。
我還沒有理解以粗體突出顯示的幾點,你能否提供更多信息或者在簡單的程序中顯示我?
這給了回答您的第一個問題:http://stackoverflow.com/questions/14947723/is-concurrenthashmap-totally-safe/14947818#14947818可以 – 2013-02-27 17:27:58