简介:java.util.ConcurrentModificationException 是 Java 中常见的异常之一,它通常发生在集合(如 List、Set、Map 等)在迭代过程中被修改。本文将解释这个异常的原因,并提供一些解决方案。
java.util.ConcurrentModificationException 是 Java 并发编程中的一个常见异常,它通常发生在集合(如 List、Set、Map 等)在迭代过程中被修改。当一个线程正在遍历集合时,另一个线程同时修改了集合的结构(例如添加或删除元素),就会抛出此异常。
原因:
synchronized(collection) {Iterator it = collection.iterator();while (it.hasNext()) {// do something with it.next()}}
List<String> list = new CopyOnWriteArrayList<>();// do something with list...for (String item : list) {// do something with item...}
Iterator<String> it = list.iterator();while (it.hasNext()) {String item = it.next();if (someCondition) {it.remove(); // remove the element from the collection}}
注意:在使用 foreach 循环时,不要在循环体内使用集合的 remove 方法,否则会抛出 ConcurrentModificationException。因为 foreach 循环也是基于 Iterator 的,如果修改了集合的结构,迭代器就会失效。
for (String item : list) {// do something with item...}