获取java.util.ConcurrentModificationException

时间:2013-05-31 07:56:05

标签: java collections hashset

我执行了以下代码

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方法中,修改了原始对象。我怎样才能克服这个问题?

1 个答案:

答案 0 :(得分:6)

在使用for-each进行迭代时,无法修改集合。如果要修改它,请使用Iterator

这种异常非常清楚地描述了in documentation

  

当不允许进行此类修改时,检测到并发修改对象的方法可能抛出此异常。

     

例如,一个线程通常不允许修改Collection而另一个线程正在迭代它。通常,在这些情况下,迭代的结果是不确定的。

参见相关问题: