java - 为什么迭代器会快速失败?它们真的会快速失败吗?

标签 java iterator fail-fast

Java 中的迭代器是快速失败的。如果迭代器值在迭代时发生变化,则会引发异常。

这纯粹是为了安全吗?我确信在某些情况下,如果值发生变化也没有多大关系。例如,假设您每 10 秒向迭代器中的成员发送一次非关键警报 - 为什么您会关心内容是否发生更改?

此外,快速失败实现仅检查计数。这是有缺陷的,因为即使迭代器的内容发生了更改,另一个线程添加和删除的计数也将相同。使用版本号不是更好吗?

最佳答案

快速失败行为纯粹是为了帮助调试。一般规则是,如果您在通过迭代器成员以外的某些方式迭代集合时修改集合,则迭代器的行为将不再可预测。它将尽力抛出异常。

因此,任何昂贵的跟踪方法都是一个坏主意。

关于java - 为什么迭代器会快速失败?它们真的会快速失败吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28409833/

相关文章:

exception - 如何让Storm因异常而停止?

java - 是否可以通过 Selenium 自动化 Oracle Forms?

java - 在 Java(或 Scala)中迭代 HashMap 的 HashMap

rust - 我如何应对惰性迭代器?

arrays - 如何在 Rust 0.8 中将 Zip 转换为数组?

java - 在单个集合上使用 iterator.remove() 的多个线程返回快速失败迭代器

java - 如何从 JMenuItem (Java Swing) 中删除空图标间隙?

java - JPA 实现——哪一个最好用?

java - 从 AWS Credentials Provider 获取安全 token

java - Java 容器是否提供故障安全迭代器