fail-fast 與 fail-safe 是什么?

fail-fast 快速失敗,是指在遍歷集合時,檢查遍歷過程中集合的modCount是否改變,如果改變就會拋出java.util.ConcurrentModificationException異常。

fail-safe 安全失敗,是指在遍歷集合時,先生成一份拷貝,然后遍歷拷貝,也就不檢查 modCount 了。

java.util包下的普通容器,比如 ArrayList、HashMap 都采用 fail-fast;java.util.concurrent包下的并發(fā)容器,比如 ConcurrentHashMap 就采用 fail-safe。

fail-fast 快速失敗

fail-fast 是集合中的快速失敗機制,對集合進行遍歷操作的時候,會檢查操作之前的集合修改次數(shù)expectedModCount,與當前的集合修改次數(shù) modCount 是否相同,如果不同就會報 java.util.ConcurrentModificationException 異常。

如下面的代碼所示,我在進行 forEach 循環(huán)的中間執(zhí)行一個 add() 操作,list 被修改就會執(zhí)行 modCount++,導致在遍歷過程中 modCount != expectModCount,拋出java.util.ConcurrentModificationException 異常。

List<String> list = new ArrayList<>();
list.add("aaa");
list.add("bbb");

list.forEach(s -> {
    System.out.println(s);
    list.add("ccc");
});
fail-fast

fail-safe 安全失敗

fail-safe 是指安全失敗機制,對集合進行遍歷操作的時候,它不是遍歷集合本身,而是先拷貝一份集合,然后遍歷這個集合。

Map<String, String> map = new ConcurrentHashMap();
map.put("a", "a1");
map.put("b", "b1");

map.forEach((k, v) -> {
    System.out.println(k + ": " + v);
    map.put("c", "c1");
});
fail-safe
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容