【发布时间】:2015-12-29 08:55:50
【问题描述】:
我正在使用 HashMap 并使用迭代器从地图中删除元素。
new Handler(SdkContext.getApplicationContext().getMainLooper()).post(new Runnable() {
@Override
public void run() {
synchronized (this) {
Iterator<Map.Entry<Placement, Aunit>> iterator = map.entrySet().iterator();
while (iterator.hasNext()) {
Map.Entry<Placement, Aunit> entry = iterator.next();
entry.getValue().deInit();
iterator.remove();
}
}
}
});
但即使是这段代码也只是有时会导致ConcurrentModificationException。它既是线程安全的,我也在使用Iterator。
那么怎么会导致异常呢?
【问题讨论】:
-
您是否同时启动多个线程?尝试在
Map而不是匿名Runnable类上同步。
标签: java android concurrency hashmap