资讯专栏INFORMATION COLUMN

fail-fast和fail-safe

魏明 / 1667人阅读

摘要:一什么是机制在用迭代器遍历集合时当集合的结构被修改会抛出异常二什么情况下集合的结构会被修改单线程环境集合在遍历的过程中如果要对集合进行增删操作没有调用迭代器的方法而是用的集合自身的方法则可能会产生事件多线程环境下当一个线程在遍历某个集合

一.什么是fail-fast机制?

在用迭代器遍历集合时,当集合的结构被修改,会抛出ConcurrentModificationException异常

二.什么情况下集合的结构会被修改?

1.单线程环境
集合在遍历的过程中,如果要对集合进行增删操作,没有调用迭代器的方法,而是用的集合自身的方法,则可能会产生fail-fast事件
2.多线程环境下
当一个线程在遍历某个集合的过程中,另一个线程对集合的结构进行了修改,则可能产生fail-fast事件

三.fail-fast机制是如何检测的?

迭代器在进行初始化的时候会将当前的modCount值赋值给exceptedmodCount变量,在每次迭代时都会校验modcount和exceptedCount是否相等,如果不相等就会抛出java.util.ConcurrentModificationException异常.

四.什么是安全失败?

采用安全失败机制的集合容器,在遍历时不是直接在集合内容上访问的,而是先复制原有集合内容,在拷贝的集合上进行遍历,所以对原集合的修改并不会被迭代器检测到

五.快速失败和安全失败分别对应哪些类?

java.util包下的集合都是快速失败的
java.util.concurrent包下的集合都是安全失败的

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/69700.html

相关文章

  • 快速失败(fail-fast)与安全失败(fail-safe)

    摘要:注意,迭代器的快速失败行为无法得到保证,因为一般来说,不可能对是否出现不同步并发修改做出任何硬性保证。快速失败迭代器会尽最大努力抛出。 fail-fast与fail-safe 在Collection集合的各个类中,有线程安全和线程不安全这2大类的版本。 对于线程不安全的类,并发情况下可能会出现fail-fast情况;而线程安全的类,可能出现fail-safe的情况。 一、并发修改 当一...

    imtianx 评论0 收藏0
  • fail-fastfail-safe在Java集合中的应用

    摘要:与在迭代器中的设计在中,最典型的与就是关于迭代器的设计。缺点是,迭代器不能正确及时的反应集合中的内容,而且一定程度上也增加了内存的消耗。 fail-fast与fail-safe简介 如果一个系统,当有异常或者错误发生时就立即中断执行,这种设计称之为fail-fast。相反如果我们的系统可以在某种异常或者错误发生时继续执行,不会被中断,这种设计称之为fail-safe。 fail-fas...

    Drummor 评论0 收藏0
  • 带你了解集合世界的fail-fast机制 CopyOnWriteArrayList 源码详解

    摘要:体现的就是适配器模式。数组对象集合世界中的机制机制集合世界中比较常见的错误检测机制,防止在对集合进行遍历过程当中,出现意料之外的修改,会通过异常暴力的反应出来。而在增强循环中,集合遍历是通过进行的。 前言 学习情况记录 时间:week 2 SMART子目标 :Java 容器 记录在学习Java容器 知识点中,关于List的重点知识点。 知识点概览: 容器中的设计模式 从Array...

    young.li 评论0 收藏0
  • 面试官:说说快速失败安全失败是什么

    摘要:我们都接触这些集合类,这些在包的集合类就都是快速失败的而包下的类都是安全失败,比如。安全失败明白了什么是快速失败之后,安全失败也是非常好理解的。最后说明一下,快速失败和安全失败是对迭代器而言的。 什么是快速失败(fail-fast)和安全失败(fail-safe)?它们又和什么内容有关系。以上两点就是这篇文章的内容,废话不多话,正文请慢用。 我们都接触 HashMap、ArrayLis...

    calx 评论0 收藏0

发表评论

0条评论

魏明

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<