哪个用于迭代列表或映射的代码序列可防止 ConcurrentModificationException?我们的代码中有反复和零星的 ConcurrentModificationException。问题有 2 个原因。
- 另一个线程在迭代时更改列表
- 在循环中调用的方法正在更改列表。
问题 1 可以通过同步循环来解决。但是,如果像原因 2 一样在循环中调用外星代码,那就不好了。
问题 2 可以通过列表或地图的副本来解决。
这意味着列表或映射必须在循环之前复制到同步块中。有更好的解决方案吗?
一些示例代码:
public void todoSomeThings( Map<Abc, Object> map ){
for( Abc abc : map.keySet() ){
abc.todoSomeThings();
}
}