Java集合中的fail-fast(快速失败)机制

fail-fast机制

fail-fast机制,即快速失败机制,是Java集合(Collection)中的错误检测机制。当在迭代集合的过程中该集合在结构上发生改变的时候,就有可能会发生fail-fast,即抛出ConcurrentModificationException异常。fail-fast机制并不保证在不同步的修改下一定会抛出异常,它只是尽最大努力去抛出,所以这种机制一般仅用于检测bug。

fail-fast原理

多个线程同时操作同一个集合时,一个线程修改了集合,modCount++,当另一个线程执行时modCount!=exceptModCount,抛出ConcurrentModificationException异常

源码属性

cursor:集合遍历过程中的即将遍历的元素的索引

lastRet:cursor -1,默认为-1,即不存在上一个时,为-1,它主要用于记录刚刚遍历过的元素的索引。

expectedModCount:这个就是fail-fast判断的关键变量了,它初始值就为ArrayList中的modCount。

modCount:modCount用于记录集合操作过程中作的修改次数,与size还是有区别的,并不一定等于size。modCount抽象类AbstractList中的变量,默认为0,而ArrayList 继承了AbstractList ,所以也有这个变量。

fail-fast事件

java多线程对同一个集合进行操作时,可能产生错误事件,抛出ConcurrentModificationException异常。

fail-fast解决方法

java集合使用com.util.Concurrent包代替com.util包下的类,如CopyOnWriteArrayList代替ArrayList

 

原文:https://blog.csdn.net/zymx14/article/details/78394464 

猜你喜欢

转载自www.cnblogs.com/InsaneMachine/p/9901868.html