首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么是Java中的故障保护和快速故障迭代器

什么是Java中的故障保护和快速故障迭代器
EN

Stack Overflow用户
提问于 2013-06-29 14:27:20
回答 3查看 91.4K关注 0票数 105

Java中有两种类型的迭代器:故障安全迭代器和故障快速迭代器。

这意味着什么,它们之间的区别是什么?

EN

回答 3

Stack Overflow用户

发布于 2013-06-29 14:45:03

它们相当于fastweakly-consistent类型:

如果集合在迭代时被集合的方法(add / remove)修改,则来自java.util包的迭代器抛出ConcurrentModificationException

java.util.concurrent包中的迭代器通常会遍历快照并允许并发修改,但在迭代器创建后可能不会反映集合更新。

票数 42
EN

Stack Overflow用户

发布于 2013-06-29 14:31:13

唯一的区别是故障安全迭代器不会抛出任何异常,这与故障快速迭代器相反。

如果在一个线程迭代集合时对其进行了结构化修改。这是因为它们在克隆集合上工作,而不是在原始集合上工作,这就是为什么它们被称为故障安全迭代器。

CopyOnWriteArrayList的迭代器是故障安全迭代器的一个例子,由ConcurrentHashMap keySet编写的迭代器也是故障安全迭代器,在Java中永远不会抛出ConcurrentModificationException。

票数 22
EN

Stack Overflow用户

发布于 2020-05-07 01:48:16

这个场景与“并发处理”相关,意味着多个用户访问相同的资源。在这种情况下,其中一个用户试图修改导致'ConcurrentProcessingException‘资源,因为在这种情况下,其他用户得到不正确的数据。这两种类型都与这种情况有关。

简单地说,

失败-快速:

如果结构修改(添加,更新,删除) happens.

  • Example,
  • 迭代器立即抛出ConcurrentModificationException : ArrayList,HashMap,TreeSet

故障安全:

  • Here迭代器不会抛出任何异常,因为它们在集合的克隆上操作,而不是在原始集合上操作。因此,它们是故障保护iterators.
  • Example : ConcurrentHashMap

、CopyOnWriteArrayList

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17377407

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档