Fail-Fast和Fail-Safe的解释
1.我们先来想一个问题,就是我在遍历集合的时候允不允许其他人来修改我的集合了,如果允许,我的集合被改乱了怎么办,如果不允许会发生什么呢?
2.我们先来介绍一下这两个概念
Fail-Fast:遍历的同时如果其它人来修改,尽快失败,则立即抛出异常(ConcurrentModificationException)
Fail-Safe:遍历的同时如果其它人来修改,应该有对应的策略来解决,牺牲一致性来解决这个问题
3.Fail-Fast的典型代表就是ArrayList
我们来看看ArrayList是如何实现的:
当你循环这个集合的时候 ,底层实际创建了一个迭代器对象,大家可以debug看一下(强制进入)
解释:
1)其中有expectModCount和modCount两个关键的
2)modCount是ArrayList中的变量
3)expectModCount是Itr中的对象
4)modCount用来记录ArrayList集合被修改(add和remove都算)了几次
5)当new Itr()的时候会把modCount的值赋值给expectModCount
6)在遍历的时候有一个方法checkForComodification()会检查expectModCount和modCount的值是否相等,如果相等继续遍历,一旦遍历的时候修改了集合中的值,那么modCount的值就会增加,这时候在比较就不相等了,就会抛异常了,可以看下面的代码就一目了然了
4.Fail-Safe的典型代表就是CopyOnWriteArrayList
强制进入:
这里大家可以看一下CopyOnWriteArrayList的add方法的实现
解释:他是把原来的数组拷贝一份的基础上进行操作的,操作完了再把新数组set进去,所以迭代器迭代的还是原来的旧数组,实现了数据的最终一致性
总结:ArrayList 是 fail-fast 的典型代表,遍历的同时不能修改,尽快失败
CopyOnWriteArrayList 是 fail-safe 的典型代表,遍历的同时可以修改,原理是读写分离
Fail-Fast和Fail-Safe的解释相关推荐
- 什么是Fail Fast和Fail Safe?
这里是目录标题 1. Fail Fast a. 概念 b. 原理 c. 关注点 d. 注意 2. Fail Safe a. 概念 b. 原理 3. Fail Fast 和 Fail Safe的区别 1 ...
- Fail Fast与Fail Safe的区别
Fail Fast Fail Fast Iterator在遍历集合时,若该集合发生了结构性的改变,则将抛出 ConcurrentModification 异常.例如: Map<String, S ...
- 聊聊hikari与tomcat jdbc pool的fail fast
序 本文主要研究在中途数据库挂的情况下,hikari与tomcat jdbc pool的fail fast情况. 实验代码 @Testpublic void testDatabaseDownAndUp ...
- Java - Java集合中的快速失败Fail Fast 机制
文章目录 什么是 fail-fast 源码解读 Itr 为什么对集合的结构进行修改会发生并发修改异常-源码分析 修改方法之 remove 修改方法之 add 案例分享 [案例一] [案例二] [案例三 ...
- 【转载】ArrayList 中数据删除 fail fast
2019独角兽企业重金招聘Python工程师标准>>> 本文转载自http://shift-alt-ctrl.iteye.com/blog/1839147 在循环arrayLlist ...
- 【springcloud问题】Could not locate PropertySource and the fail fast property is set, failing
问题描述:使用springcloud的本地配置中心时出现:Could not locate PropertySource and the fail fast property is set, fail ...
- 【android录屏填坑】录屏报错start fail,stop fail
先写个标题,有时间了填充内容. 时隔N天,终于忙完了.内容填充中-- 前言 为什么要写这么一篇文章.因为我最近做录屏实在是被坑哭了.不是遇到start fail报错,就是遇到stop fail报错,这 ...
- 网络安全架构部署:Fail Closed,Fail Open,Fail safe,Fail over是什么意思?
目录 1.Fail Closed(故障关闭) 故障关闭的用例和好处 部署故障关闭注意事项 2.Fail Open(故障打开) 故障打开的用例及好处 部署故障打开注意事项 3.Fail Safe(故障保 ...
- Fail - Fast机制
平常在使用集合的时候肯定会遇到过遍历删除集合中的某些元素,哪么在进行操作的时候大家有 没有遇到过什么问题呢?最近在使用集合进行遍历删除元素的时候,我就碰到了这个异常:java.util.Concurr ...
- Java集合篇:fail-fast机制 与 fail-safe
在JDK的Collection中我们时常会看到类似于这样的话: 例如,ArrayList: 注意,迭代器的快速失败行为无法得到保证,因为一般来说,不可能对是否出现不同步并发修改做出任何硬性保证.快速失 ...
最新文章
- Android--Otto事件总线 -- 组件之间通讯框架使用 --模式解析
- linux系统性能优化及瓶颈分析
- [小故事大道理] -- GoodMorning,Sir!
- 成功解决TypeError: sequence item 0: expected str instance, list found
- 最简单的基于FFMPEG+SDL的视频播放器 ver2 (采用SDL2.0)
- 如何对SAP Leonardo上的机器学习模型进行重新训练
- halcon模板匹配学习(二) 准备模板
- 深入理解null的原理
- 在ASP.NET Core中使用百度在线编辑器UEditor
- mysql中datetime比较大小问题 (转的)
- 理解包装类 Integer 的底层实现,教你破解所有面试难题!
- 表格标签(HTML)
- oracle基本的查询语句,Oracle中的基本查询语句总结
- Java数据结构与算法(二) 简单排序
- Python星盘接口、排盘、占星、API功能描述
- VsCode切换语言
- ubuntu下终于安装好了nvidia的gt540显卡驱动
- 计算机网络谢希仁第七版 第五章 答案
- 显示农历天气时钟小部件下载_玛雅日历安卓版下载|玛雅日历app下载_v5.3.2
- 2015 计蒜之道 初赛 第一场 搜狗输入法的分词算法
热门文章
- 0028. Find the Index of the First Occurrence in a string (leetcode in python day7)
- Keil等软件解决中文乱码问题
- 什么是单头螺纹、多头螺纹?螺距与导程是什么关系?
- Qt编写安防视频监控系统9-自动隐藏光标
- unity 3D RPG教程(一)
- 西门子1200博途程序与威纶触摸屏画面实例 西门子1200与4台MS300变频器modbus485轮询读写参数
- 6、USRP【入门软件无线电(SDR)】PySDR:使用 Python 的 SDR 和 DSP 指南
- 如今的互联网还是不是最值得加入的行业 #从熊猫败局聊起(转载)
- 瑞利分布、莱斯分布与窄带过程
- body html 分别指什么,body表示什么