我目前正在开发一个多线程 Java 应用程序,其中有一个同步集合(例如 Collections.synchronizedList)来存储一些数据。在我的代码的一部分中,我有一个循环遍历该集合,而另一个线程可能同时添加或删除元素。
但是,我在迭代过程中遇到了 ConcurrentModificationException,尽管我认为使用同步集合应该可以防止这个问题。如何安全地迭代 Java 中的同步集合而不遇到此异常?
这是我的代码的简化版本:
List<String> synchronizedList = Collections.synchronizedList(new ArrayList<>());
// ...
synchronized (synchronizedList) {
Iterator<String> iterator = synchronizedList.iterator();
while (iterator.hasNext()) {
String element = iterator.next();
// Some processing...
}
}
我错过了什么或做错了什么?关于如何在不影响线程安全的情况下处理并发修改有什么建议吗?
请使用fori而不是foreach,因为fori的底层就是它。