栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

什么是Java中的故障安全和故障快速迭代器

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

什么是Java中的故障安全和故障快速迭代器

他们之间有什么区别…

“故障安全”(在工程中)表示某些故障不会造成或只造成最小的损坏。严格地说,有 没有这样的事情
在Java中的故障安全迭代器。如果迭代器失败(通常为“失败”),则可能会发生损坏。

我怀疑您实际上是在说“弱一致性”迭代器。Javadoc说:

“大多数并发Collection实现(包括大多数Queue)也与通常的java.util约定不同,因为它们的Iterators和Spliterators提供了弱一致性而不是快速失败遍历。”

通常,弱一致性意味着如果在迭代过程中同时修改集合,则对迭代结果的保证就较弱。(详细信息将在每个并发集合类javadocs中指定。)

“快速失败”(在系统设计中)是指积极检查故障状况,以便在可能造成太多损坏之前(可能为1)检测到故障状况。在Java中,快速失败的迭代器会因抛出失败

ConcurrentModificationException

“快速失败”和“弱一致性”的替代是语义,其中迭代无法预测地失败。例如,有时会给出错误的答案或引发意外的异常。(这是

Enumeration
早期Java版本中API
的一些标准实现的行为。)

…并且它们不同于我们用于收集的迭代器。

否。这些是由标准Collection类型实现的迭代器的 属性
。也就是说,当针对同步和Java内存模型1正确使用它们时,它们要么是“快速失败”,要么是“弱一致性” 。


快速失败迭代器 通常 使用

volatile
收集对象上的计数器 实现。

  • 更新集合时,计数器会增加。
  • Iterator
    创建an时,计数器的当前值将嵌入到
    Iterator
    对象中。
  • Iterator
    执行操作,该方法比较两个计数器值和抛出一个CME如果它们是不同的。

相反,弱一致性迭代器通常是轻量级的,并利用每个并发集合的内部数据结构的属性。没有一般模式。如果您有兴趣,请阅读不同集合类的源代码。


1-失败的原因是,快速失败行为假设应用程序ID关于同步和内存模型正确无误。这意味着(例如)如果您在

ArrayList
没有正确同步的情况下进行迭代,则结果可能是损坏的列表结果。“快速失败”机制可能会检测到并发修改(尽管不能保证),但不会检测到潜在的损坏。例如,javadoc for这样
Vector.iterator()
说:

“不能保证迭代器的快速失败行为,因为通常来说,在存在不同步的并发修改的情况下,不可能做出任何严格的保证。快速失败迭代器会

ConcurrentModificationException
尽最大努力。因此,编写依赖于此异常的程序的正确性是错误的:迭代器的快速失败行为仅应用于检测错误。”



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/469487.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号