Java集合中快速失败机制"fail-fast"指什么呢?
下文笔者讲述java集合中快速失败机制的简介说明,如下所示
快速失败机制"fail-fast"简介说明
快速失败机制:
java集合一种错误检测机制
当多个线程对集合进行结构上的改变时
有可能会产生 fail-fast 机制
=================================
例:
假设存在两个线程(线程1、线程2),
线程1
通过Iterator在遍历集合A中的元素
在某个时候线程2修改了集合A的结构(结构上面的修改,而不是简单的修改集合元素的内容)
这个时候程序就会抛出 ConcurrentModificationException 异常,从而产生fail-fast机制。
快速失败的原因分析
原因分析:
迭代器在遍历时
Arraylist的父类AbstarctList中有一个modCount变量
每次对集合进行修改时都会modCount++
而foreach的实现原理其实就是Iterator
ArrayList的Iterator中有一个expectedModCount变量
该变量会初始化和modCount相等
每当迭代器使用hashNext()/next()遍历下一个元素之前
都会检测modCount的值和expectedmodCount的值是否相等
如果集合进行增删操作
modCount变量就会改变
就会造成expectedModCount!=modCount
此时就会抛出ConcurrentModificationException异常
fast-fail解决方法
在遍历过程中
所有涉及到改变modCount值的地方全部加上synchronized
使用CopyOnWriteArrayList来替换ArrayList
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。


