ConcurrentHashMap中的失败安全迭代器

a L*_*ner 2 java collections

在这两个迭代器 CopyOnWriteArrayListConcurrentHashMap 有故障安全和不乱扔CME.

IN CopyOnWriteArrayList<E>迭代器构建在原始底层数组的快照上.所以这里的迭代器是故障安全的,也是线程安全的.

Javadcos CopyOnWriteArrayList<E> 明确表示术语快照.

"快照"样式迭代器方法在创建迭代器时使用对数组状态的引用.这个数组在迭代器的生命周期中永远不会改变,所以干扰是不可能的,并且保证迭代器不会抛出ConcurrentModificationException.

ConcurrentHashMap迭代器的情况下是否也建立在原始底层地图的快照上?

谢谢...

ass*_*ias 5

不一定 - 比较javadoc(强调我的):

类似地,Iterators和Enumerations 在迭代器/枚举的创建时或之后的某个时刻返回反映哈希表状态的元素.

如果你看一下values,entrySetkeySet方法:

视图的迭代器[...]保证在构造迭代器时遍历元素,并且可以(但不保证)反映构造之后的任何修改.