ConcurrentHashMap中的失败安全迭代器

时间:2012-10-09 12:30:56

标签: java collections

CopyOnWriteArrayListConcurrentHashMap中的迭代器都是故障安全的,不会抛出CME。

IN CopyOnWriteArrayList<E>迭代器是基于快照构建的 原始底层数组。所以这里的迭代器是故障安全,还有线程安全。

CopyOnWriteArrayList<E>的Javadcos明确指出术语快照

  

“快照”样式迭代器方法使用对状态的引用   创建迭代器时的数组。这个数组从不   在迭代器的生命周期中发生了变化,因此干扰就是   不可能,并且保证迭代器不会抛出   ConcurrentModificationException的。

如果ConcurrentHashMap迭代器也建立在原始底层地图的快照上吗?

...谢谢

1 个答案:

答案 0 :(得分:5)

不一定 - cf the javadoc (emphasis mine)

  

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

如果您查看valuesentrySetkeySet方法:

  

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