【发布时间】:2012-08-22 03:33:42
【问题描述】:
在 JDK 1.6 的 HashSet.java 中,有一些关于 HashSet 迭代器的 fail-fast 属性的 cmets。
这个类的迭代器方法返回的迭代器是快速失败的:如果集合在迭代器创建后的任何时候被修改,除了通过迭代器自己的删除方法之外,迭代器抛出一个 ConcurrentModificationException。因此,面对并发修改,迭代器会快速而干净地失败,而不是在未来不确定的时间冒任意的、非确定性的行为。
我可以理解上面的段落,因为它非常简单明了,但我无法理解下面的段落。如果我有一些简单的例子表明快速失败的迭代器甚至会失败,我可能会理解。
请注意,无法保证迭代器的快速失败行为,因为一般来说,在存在不同步的并发修改的情况下无法做出任何硬保证。快速失败的迭代器会尽最大努力抛出 ConcurrentModificationException。因此,编写一个依赖此异常的正确性的程序是错误的:迭代器的快速失败行为应仅用于检测错误。
【问题讨论】:
-
它基本上是在说,不要依赖 Java 肯定会让你知道你在滥用迭代器。简而言之,您不能在迭代列表时修改它。
标签: java iterator hashset fail-fast