2012-10-09 77 views
2

CopyOnWriteArrayListConcurrentHashMap中的迭代器都是自動安全的,不會拋出CME。ConcurrentHashMap中的失敗安全迭代器

IN CopyOnWriteArrayList<E>迭代器建立在快照的 原始底層數組。所以這裏的迭代器是自動防護線程安全。

Javadcos for CopyOnWriteArrayList<E>明確聲明術語快照

「快照」樣式迭代器方法在創建迭代器的位置使用對數組狀態的引用( )。這個數組永遠不會在迭代器的生命週期中發生變化 ,所以干擾是 不可能的,迭代器保證不會拋出 ConcurrentModificationException。

是否在ConcurrentHashMap迭代器也建在原來的基礎映射的快照的情況下?

謝謝...

回答

5

不一定 - CF the javadoc (emphasis mine)

同樣,迭代器和枚舉的或自創建迭代器在某些時候回反射哈希表的狀態元素/列舉

如果你看一下valuesentrySetkeySet方法:

視圖的iterator [...]確保遍歷元素,因爲它們存在於迭代器構造,以及可能(但不保證)反映了施工後的任何修改。