在迭代遍历线程不安全的集合的时候,如ArrayList,如果其他线程修改了该集合,那么将抛出ConcurrentModificationException,这就是 fail-fast 策略。

modCount记录了集合的修改次数,在迭代器初始化过程种会将这个值赋给迭代器的expectedModCount,在迭代过程中判断modCount是否和exceptedModCount相等,如果其他线程在这过程中修改了modCount,势必modCount!=exceptedModCount。比如,删除元素:

在迭代过程种删除元素的时候会验证modCount

fail-fast机制,是一种错误检测机制。它只能被用来检测错误,因为JDK并不保证fail-fast机制一定会发生

注意,迭代器的快速失败行为无法得到保证,因为一般来说,不可能对是否出现不同步并发修改做出任何硬性保证。快速失败迭代器会尽最大努力抛出 ConcurrentModificationException。因此,为提高这类迭代器的正确性而编写一个依赖于此异常的程序是错误的做法:迭代器的快速失败行为应该仅用于检测 bug。

modCount既不能确保可见性(volatile),modCount++;又不是原子操作。

最新文章

  1. 图论 - 寻找fly真迹
  2. IntelliJ IDEA 将 Maven 构建的 Java 项目打包
  3. 【PRML读书笔记-Chapter1-Introduction】1.3 Model Selection
  4. java 时间转换
  5. C语言中的字符和字符串
  6. 什么是工程师文化?各位工程师是为什么活的?作为一个IT或互联网公司为什么要工程师文化?
  7. LeetCode_Palindrome Number
  8. iOS开发之XMPP即时通讯简单实现
  9. Codeforces Round #249 (Div. 2) A B
  10. 三种ajax上传文件方法
  11. OpenCV3编程入门笔记(一)
  12. BootStrap标题制作模板
  13. 由override 和 overload 引发的学习感悟
  14. 019 spark on yarn(Job的运行流程,可以对比mapreduce的yarn运行)
  15. 使用JDBC从数据库中查询数据的方法
  16. 深度学习原理与框架-RNN网络架构-RNN网络 1.RNN的前向传播 2.RNN的反向传播
  17. 【Linux】apt-get 源地址汇总
  18. 【题解】 bzoj4033: [HAOI2015]树上染色* (动态规划)
  19. java第二次实验报告20135231
  20. 关于Cocos2d-x中父子节点的互动

热门文章

  1. [Flask]常用过滤器-控制字符串
  2. 【MAC】图片编辑工具-合成图片
  3. flutter textfield
  4. Selenium 2自动化测试实战11(键盘事件)
  5. delphi TDbGrid 右键 PopupMenu 菜单只在有数据的地方弹出
  6. java:Mybatis框架3(二级缓存,延时和积极加载,SSI(Ibatis)集成,SSM集成)
  7. Docker安装报错
  8. MyBatis框架原理3:缓存
  9. python学习之模块-模块(五)
  10. python基础之字符串常用方法