java.util.ConcurrentModificationException 代码举例
时间: 2024-08-14 08:01:30 浏览: 48
java.util.ConcurrentModificationException 解决方法
`ConcurrentModificationException` 是 Java 中的一个运行时异常,通常会在多线程环境下发生,当一个集合(如 `ArrayList`、`HashMap` 等)在其遍历过程中被其他线程修改时抛出这个异常。这是因为集合类内部维护了一个迭代器(iterator),它假设在迭代期间不会有任何修改操作。
以下是一个简单的示例,演示了如何因并发修改而引发这个异常:
```java
import java.util.ArrayList;
import java.util.List;
public class ConcurrentModificationExample {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
Thread thread = new Thread(() -> {
// 向列表添加元素
for (int i = 0; i < 5; i++) {
list.add("Element " + i);
}
// 这里尝试同时修改列表并遍历,会抛出异常
for (String element : list) {
System.out.println(element);
}
});
thread.start(); // 启动新线程
try {
// 主线程等待新线程结束
thread.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
// 这部分代码永远无法到达,因为会抛出异常
System.out.println("This won't be printed due to the exception");
}
}
```
在这个例子中,主线程启动一个新线程添加元素到 `list`,然后主线程试图打印列表的内容。由于新线程也在修改列表,因此当迭代器检测到集合已被修改时,就会抛出 `ConcurrentModificationException`。
阅读全文