【柒夭八股】Fail-safe 机制和 Fail-fast 机制分别有什么作用?
柒夭八股 Day01
今天来说一下,Fail-safe 机制和 Fail-fast 机制分别有什么作用?
Fail-safe 和 Fail-fast 机制都是操作集合的时候出现的一种失败处理机制,现在我们分别来说一下这两种机制:
- Fail-fast:表示快速失败,在集合使用迭代器遍历的过程中,一旦发现容器中的数据被修改了,会立刻抛出ConcurrentModificationException 异常,从而导致遍历失败,如下图所示:

- Fail-safe,表示失败安全,也就是在这种机制下,出现集合元素的修改,不会抛出以上集合修改时失败出现的ConcurrentModificationException 的异常。其原因如下,采用安全失败机制的集合容器,其在遍历的时候不是直接在集合内容上进行访问的,其是先复制原有集合的内容,在拷贝的集合上面去进行遍历,由于迭代时是对原集合的拷贝进行遍历的。由于迭代时是对原集合的拷贝进行遍历,所以在遍历过程中对于原集合所作的修改并不能被迭代器检测到,如下图所示:

在这里我们定义了一个 CopyOnWriteArrayList 的集合,在对这个集合使用迭代器进行遍历的时候,我们对于集合中的元素进行修改,此时并不会抛出异常,但同时不会打印出增加的元素。
- 总结
- 在 Java.util 包下的集合类都是快速失败机制的,常见的使用 Fail-fast 方式遍历的容器有 HashMap 和 ArrayList 等。
- Java.util.concurrent 包下的容器都是安全失败的,可以在多线程下并发使用,并发修改。然后常见的 Fail-Safe 方式遍历的容器有 ConcerrentHashMap 和 CopyOnWriteArrayList 等。
评论
问答助学
相关内容
0个评论
全部评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
作者分享
🌟择难路,未有疑,四非学院本运气拉满,春招拿下大厂后端
160
快了,xdm,由于这周上班(小加班),写得有点慢,已经抓紧码字了😝
7
在学校的时候忙毕业的事(主要享受学校时光,有点懒),就每天写一点,发现还不如推倒重写,这今天整理一下😁,先预告一手
11
分析一个真人真事,就是我舍友下午去了一个测试的公司,然后那边说实训2个月,后面打一年工抵工资,我舍友来问我需要注意什么,就我看了一下合同,感觉有点像是招转陪,后面上网查了一下确实是,所以在这里警醒大家,找工作千万要注意,不要因为急给骗了😂
13
晓多科技社招一面
周天体测完全身酸痛,就没去上班,请假在家面试,然后上周投了一个社招1~3 年的岗位,就简单面了一下:
1. 自我介绍
2. 询问背景情况,确认社招,然后校招通过可以提前实习
3. 询问了一下实习情况
4. 直接做一道题,就直接给一个白板,原本要用 IDEA 写,但是我 IDEA 启动不了,直接白板写了,题目要求代码实现,包括数据库表设计和设计模式,我数据库表设计直接用 class 实体类代替了,问题不是很大,然后回答单例完成 ID 生成器包装,策略完成不同类型优惠券计算,然后工厂针对优惠券返回,然后加上责任链进行优惠卷相关参数校验,然后我这里 ID 生成说的时候用雪花算法+基因法冗余了用户 ID 号,然后从 ThreadLocal 里面取出用户 ID对比,避免水平越权,然后代码实现工厂、策略,差不多就这些了
/**
* 题目1:电商优惠券系统设计
业务场景:
设计一个电商平台的优惠券系统,需满足:
1.支持多种优惠类型(满减、折扣、赠品)。
2.优惠券可叠加使用,但需校验适用范围(如特定商品/用户等级)。
3.需记录优惠券领取、使用记录,并支持运营按“用户领取量”和“券使用率”分析数据。
重点:
1.数据建模(数据表与关系设计)。
2.面向对象设计(要素+设计模式)。
*
*
*/
5. 算法题:双向链表反转,直接白板手敲
出去差不多半小时 HR 反馈过了,二面
17
