1.我们先来想一个问题,就是我在遍历集合的时候允不允许其他人来修改我的集合了,如果允许,我的集合被改乱了怎么办,如果不允许会发生什么呢?

2.我们先来介绍一下这两个概念

Fail-Fast:遍历的同时如果其它人来修改,尽快失败,则立即抛出异常(ConcurrentModificationException

Fail-Safe:遍历的同时如果其它人来修改,应该有对应的策略来解决,牺牲一致性来解决这个问题

3.Fail-Fast的典型代表就是ArrayList

我们来看看ArrayList是如何实现的:

当你循环这个集合的时候 ,底层实际创建了一个迭代器对象,大家可以debug看一下(强制进入)

解释:

1)其中有expectModCountmodCount两个关键的

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的解释相关推荐

  1. 什么是Fail Fast和Fail Safe?

    这里是目录标题 1. Fail Fast a. 概念 b. 原理 c. 关注点 d. 注意 2. Fail Safe a. 概念 b. 原理 3. Fail Fast 和 Fail Safe的区别 1 ...

  2. Fail Fast与Fail Safe的区别

    Fail Fast Fail Fast Iterator在遍历集合时,若该集合发生了结构性的改变,则将抛出 ConcurrentModification 异常.例如: Map<String, S ...

  3. 聊聊hikari与tomcat jdbc pool的fail fast

    序 本文主要研究在中途数据库挂的情况下,hikari与tomcat jdbc pool的fail fast情况. 实验代码 @Testpublic void testDatabaseDownAndUp ...

  4. Java - Java集合中的快速失败Fail Fast 机制

    文章目录 什么是 fail-fast 源码解读 Itr 为什么对集合的结构进行修改会发生并发修改异常-源码分析 修改方法之 remove 修改方法之 add 案例分享 [案例一] [案例二] [案例三 ...

  5. 【转载】ArrayList 中数据删除 fail fast

    2019独角兽企业重金招聘Python工程师标准>>> 本文转载自http://shift-alt-ctrl.iteye.com/blog/1839147 在循环arrayLlist ...

  6. 【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 ...

  7. 【android录屏填坑】录屏报错start fail,stop fail

    先写个标题,有时间了填充内容. 时隔N天,终于忙完了.内容填充中-- 前言 为什么要写这么一篇文章.因为我最近做录屏实在是被坑哭了.不是遇到start fail报错,就是遇到stop fail报错,这 ...

  8. 网络安全架构部署:Fail Closed,Fail Open,Fail safe,Fail over是什么意思?

    目录 1.Fail Closed(故障关闭) 故障关闭的用例和好处 部署故障关闭注意事项 2.Fail Open(故障打开) 故障打开的用例及好处 部署故障打开注意事项 3.Fail Safe(故障保 ...

  9. Fail - Fast机制

    平常在使用集合的时候肯定会遇到过遍历删除集合中的某些元素,哪么在进行操作的时候大家有 没有遇到过什么问题呢?最近在使用集合进行遍历删除元素的时候,我就碰到了这个异常:java.util.Concurr ...

  10. Java集合篇:fail-fast机制 与 fail-safe

    在JDK的Collection中我们时常会看到类似于这样的话: 例如,ArrayList: 注意,迭代器的快速失败行为无法得到保证,因为一般来说,不可能对是否出现不同步并发修改做出任何硬性保证.快速失 ...

最新文章

  1. Android--Otto事件总线 -- 组件之间通讯框架使用 --模式解析
  2. linux系统性能优化及瓶颈分析
  3. [小故事大道理] -- GoodMorning,Sir!
  4. 成功解决TypeError: sequence item 0: expected str instance, list found
  5. 最简单的基于FFMPEG+SDL的视频播放器 ver2 (采用SDL2.0)
  6. 如何对SAP Leonardo上的机器学习模型进行重新训练
  7. halcon模板匹配学习(二) 准备模板
  8. 深入理解null的原理
  9. 在ASP.NET Core中使用百度在线编辑器UEditor
  10. mysql中datetime比较大小问题 (转的)
  11. 理解包装类 Integer 的底层实现,教你破解所有面试难题!
  12. 表格标签(HTML)
  13. oracle基本的查询语句,Oracle中的基本查询语句总结
  14. Java数据结构与算法(二) 简单排序
  15. Python星盘接口、排盘、占星、API功能描述
  16. VsCode切换语言
  17. ubuntu下终于安装好了nvidia的gt540显卡驱动
  18. 计算机网络谢希仁第七版 第五章 答案
  19. 显示农历天气时钟小部件下载_玛雅日历安卓版下载|玛雅日历app下载_v5.3.2
  20. 2015 计蒜之道 初赛 第一场 搜狗输入法的分词算法

热门文章

  1. 0028. Find the Index of the First Occurrence in a string (leetcode in python day7)
  2. Keil等软件解决中文乱码问题
  3. 什么是单头螺纹、多头螺纹?螺距与导程是什么关系?
  4. Qt编写安防视频监控系统9-自动隐藏光标
  5. unity 3D RPG教程(一)
  6. 西门子1200博途程序与威纶触摸屏画面实例 西门子1200与4台MS300变频器modbus485轮询读写参数
  7. 6、USRP【入门软件无线电(SDR)】PySDR:使用 Python 的 SDR 和 DSP 指南
  8. 如今的互联网还是不是最值得加入的行业 #从熊猫败局聊起(转载)
  9. 瑞利分布、莱斯分布与窄带过程
  10. body html 分别指什么,body表示什么