获取java.util.ConcurrentModificationException

Cha*_*kag 0 java collections hashset

我执行了以下代码

Map<String, SyncPrimitive> syncPrimitives = new HashMap<String, SyncPrimitive>();

for (SyncPrimitive primitive : this.getSyncPrimitives()) {
         String groupId = primitive.getId();
         primitive.onConnect(groupId);
    }
Run Code Online (Sandbox Code Playgroud)

然后我得到以下异常

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)
Run Code Online (Sandbox Code Playgroud)

在onConnect方法中,原始对象被修改.我怎样才能克服这个问题?

bsi*_*nau 6

您无法在迭代期间使用for-each修改集合.如果要修改它,请使用Iterator.

文档中描述的这种异常非常清楚:

当不允许这样的修改时,检测到对象的并发修改的方法可能抛出此异常.

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

查看相关问题: