java modCount和fail-fast
2024-10-07 05:03:16
在迭代遍历线程不安全的集合的时候,如ArrayList,如果其他线程修改了该集合,那么将抛出ConcurrentModificationException,这就是 fail-fast 策略。
modCount记录了集合的修改次数,在迭代器初始化过程种会将这个值赋给迭代器的expectedModCount,在迭代过程中判断modCount是否和exceptedModCount相等,如果其他线程在这过程中修改了modCount,势必modCount!=exceptedModCount。比如,删除元素:
在迭代过程种删除元素的时候会验证modCount
fail-fast机制,是一种错误检测机制。它只能被用来检测错误,因为JDK并不保证fail-fast机制一定会发生。
注意,迭代器的快速失败行为无法得到保证,因为一般来说,不可能对是否出现不同步并发修改做出任何硬性保证。快速失败迭代器会尽最大努力抛出 ConcurrentModificationException。因此,为提高这类迭代器的正确性而编写一个依赖于此异常的程序是错误的做法:迭代器的快速失败行为应该仅用于检测 bug。
modCount既不能确保可见性(volatile),modCount++;又不是原子操作。
最新文章
- 图论 - 寻找fly真迹
- IntelliJ IDEA 将 Maven 构建的 Java 项目打包
- 【PRML读书笔记-Chapter1-Introduction】1.3 Model Selection
- java 时间转换
- C语言中的字符和字符串
- 什么是工程师文化?各位工程师是为什么活的?作为一个IT或互联网公司为什么要工程师文化?
- LeetCode_Palindrome Number
- iOS开发之XMPP即时通讯简单实现
- Codeforces Round #249 (Div. 2) A B
- 三种ajax上传文件方法
- OpenCV3编程入门笔记(一)
- BootStrap标题制作模板
- 由override 和 overload 引发的学习感悟
- 019 spark on yarn(Job的运行流程,可以对比mapreduce的yarn运行)
- 使用JDBC从数据库中查询数据的方法
- 深度学习原理与框架-RNN网络架构-RNN网络 1.RNN的前向传播 2.RNN的反向传播
- 【Linux】apt-get 源地址汇总
- 【题解】 bzoj4033: [HAOI2015]树上染色* (动态规划)
- java第二次实验报告20135231
- 关于Cocos2d-x中父子节点的互动