Exception in thread "AWT-EventQueue-0" java.util.ConcurrentModificationException
阿新 • • 發佈:2022-01-02
當方法檢測到物件的併發修改,但不允許這種修改時,丟擲此異常。
例如,某個執行緒在 Collection 上進行迭代時,通常不允許另一個線性修改該 Collection。通常在這些情況下,迭代的結果是不明確的。如果檢測到這種行為,一些迭代器實現(包括 JRE 提供的所有通用 collection 實現)可能選擇丟擲此異常。執行該操作的迭代器稱為快速失敗 迭代器,因為迭代器很快就完全失敗,而不會冒著在將來某個時間任意發生不確定行為的風險。
注意,此異常不會始終指出物件已經由不同執行緒併發修改。如果單執行緒發出違反物件協定的方法呼叫序列,則該物件可能丟擲此異常。例如,如果執行緒使用快速失敗迭代器在 collection 上迭代時直接修改該 collection,則迭代器將丟擲此異常。所以出現這種異常的通暢情況是使用了Iterator的原因,比如list。
List<String> bullets = new ArrayList<>();
for (String bullet : bullets) {
System.out.println(bullet);
}
如果同時有其它執行緒對mm進行了修改,則丟擲上面的異常。
如果要避免這種錯誤,那麼就不要使用Iterator,寫成:
List<String> bullets = new ArrayList<>(); for (int i = 0; i < bullets.size();i++) { System.out.println(bullets.get(i)); }