java.util.ConcurrentModificationException
(并发修改异常)通常在尝试对集合进行迭代时,如果在迭代过程中对集合进行了修改,就会抛出该异常。这种异常主要是为了防止在多线程环境下出现不一致的状态。
下面是一个简单的例子,说明如何触发这个异常:
import java.util.ArrayList;
import java.util.List;
import java.util.Iterator;
public class ConcurrentModificationExample {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("A");
list.add("B");
list.add("C");
// 使用迭代器遍历列表
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
String value = iterator.next();
System.out.println(value);
// 在迭代过程中修改集合
if (value.equals("B")) {
list.remove(value); // 这里会抛出ConcurrentModificationException
}
}
}
}
在这个例子中,我们创建了一个 ArrayList
并添加了一些元素。然后我们使用迭代器遍历这个列表。在遍历过程中,我们尝试删除一个元素("B"),这会导致 ConcurrentModificationException
被抛出,因为我们在迭代过程中修改了集合。
要避免这种异常,可以使用迭代器的 remove
方法,或者在遍历完成后再进行修改。例如:
import java.util.ArrayList;
import java.util.List;
import java.util.Iterator;
public class SafeModificationExample {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("A");
list.add("B");
list.add("C");
// 使用迭代器遍历列表
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
String value = iterator.next();
System.out.println(value);
// 使用迭代器的remove方法安全地删除元素
if (value.equals("B")) {
iterator.remove(); // 安全删除
}
}
System.out.println("修改后的列表: " + list);
}
}
在这个修改后的示例中,我们使用了迭代器的 remove
方法来安全地删除元素,从而避免了 ConcurrentModificationException
。