快速失敗和安全失敗
阿新 • • 發佈:2021-12-01
快速失敗:指的是在迭代集合時,如果對集合進行增刪時,會丟擲異常ConcurrentModificationException。java.util下的集合都是快速失敗
快速失敗的原理:並且在遍歷過程中使用一個 modCount 變數。集合在被遍歷期間如果內容發生變化,就會改變 modCount 的值。每當迭代器使用 hashNext()/next() 遍歷下一個元素之前,都會檢測 modCount 變數是否為 expectedmodCount 值,是的話就返回遍歷;否則丟擲異常,終止遍歷。
安全失敗:指的是在迭代集合時,對集合進行增刪時,不會丟擲異常,java.util.concurrent下的集合都是安全失敗。
安全失敗的原理:由於迭代時是對原集合的拷貝進行遍歷,所以在遍歷過程中對原集合所作的修改並不能被迭代器檢測到,所以不會觸發 Concurrent Modification Exception。這頁也將導致無法在當前遍歷的過程中無法訪問增加修改的內容。