This question already has answers here:
Why is a ConcurrentModificationException thrown and how to debug it
(7个答案)
2年前关闭。
我想让一个线程等待另一个线程完成在Hashmap上的写入,但是即使我同步了该方法,我也总是会收到java.util.ConcurrentModificationException。
这是我的代码:
非常感谢您的帮助! :)
(7个答案)
2年前关闭。
我想让一个线程等待另一个线程完成在Hashmap上的写入,但是即使我同步了该方法,我也总是会收到java.util.ConcurrentModificationException。
这是我的代码:
HashMap<Page, Integer> prebuffer = new HashMap<Page, Integer>();
Map<Page,Integer> buffer = Collections.synchronizedMap(prebuffer);
private synchronized void bufferContaining(int pageid) {
synchronized (buffer) {
if (buffer.size() > 1) {
for (Map.Entry<Page, Integer> entry : buffer.entrySet()) {
Page page = entry.getKey();
int taIds = entry.getValue();
if (page.pid == pageid) {
buffer.remove(page, new Integer(taIds));
}
}
}
}
}
非常感谢您的帮助! :)
最佳答案
该问题与synchronize
无关,而是与您正在从其中进行迭代的集合(buffer
映射)中删除元素的事实有关。
您有几种方法可以遵循:
记住要删除的项目,然后再删除它们
使用迭代器移动并直接从地图中删除
关于java - 同步多个线程以编辑Hashmap ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50786417/
10-10 09:36