【问题标题】:fail safe iterator in ConcurrentHashMapConcurrentHashMap 中的故障安全迭代器
【发布时间】:2012-10-09 12:30:56
【问题描述】:

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

IN CopyOnWriteArrayList<E> 迭代器建立在 snapshot 的 原始底层数组。所以这里的迭代器是fail-safe,也是thread-safe。

CopyOnWriteArrayList<E> 的 Javadcos 明确声明了术语快照

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

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

谢谢...

【问题讨论】:

    标签: java collections


    【解决方案1】:

    不一定 - cf the javadoc (emphasis mine):

    类似地,迭代器和枚举返回反映散列表状态的元素在迭代器/枚举创建时或之后的某个时间点

    如果您查看valuesentrySetkeySet 方法:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-17
      • 1970-01-01
      • 1970-01-01
      • 2013-06-26
      • 2015-04-27
      • 1970-01-01
      • 2016-11-15
      • 1970-01-01
      相关资源
      最近更新 更多