我执行了以下代码
Map<String, SyncPrimitive> syncPrimitives = new HashMap<String, SyncPrimitive>();
for (SyncPrimitive primitive : this.getSyncPrimitives()) {
String groupId = primitive.getId();
primitive.onConnect(groupId);
}
然后我得到以下异常
Error while calling watcher
java.util.ConcurrentModificationException
at java.util.HashMap$HashIterator.nextEntry(HashMap.java:793)
at java.util.HashMap$KeyIterator.next(HashMap.java:828)
在onConnect方法中,修改了原始对象。我怎样才能克服这个问题?
答案 0 :(得分:6)
在使用for-each进行迭代时,无法修改集合。如果要修改它,请使用Iterator。
这种异常非常清楚地描述了in documentation:
当不允许进行此类修改时,检测到并发修改对象的方法可能抛出此异常。
例如,一个线程通常不允许修改Collection而另一个线程正在迭代它。通常,在这些情况下,迭代的结果是不确定的。