1. 程式人生 > >Java集合中的fail-fast(快速失敗)機制

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