fail-fast和fail-safe

kaka發表於2019-01-19

一.什麼是fail-fast機制?

在用迭代器遍歷集合時,當集合的結構被修改,會丟擲ConcurrentModificationException異常

二.什麼情況下集合的結構會被修改?

1.單執行緒環境
集合在遍歷的過程中,如果要對集合進行增刪操作,沒有呼叫迭代器的方法,而是用的集合自身的方法,則可能會產生fail-fast事件
2.多執行緒環境下
當一個執行緒在遍歷某個集合的過程中,另一個執行緒對集合的結構進行了修改,則可能產生fail-fast事件

三.fail-fast機制是如何檢測的?

迭代器在進行初始化的時候會將當前的modCount值賦值給exceptedmodCount變數,在每次迭代時都會校驗modcount和exceptedCount是否相等,如果不相等就會丟擲java.util.ConcurrentModificationException異常.

四.什麼是安全失敗?

採用安全失敗機制的集合容器,在遍歷時不是直接在集合內容上訪問的,而是先複製原有集合內容,在拷貝的集合上進行遍歷,所以對原集合的修改並不會被迭代器檢測到

五.快速失敗和安全失敗分別對應哪些類?

java.util包下的集合都是快速失敗的
java.util.concurrent包下的集合都是安全失敗的

相關文章