gpt4 book ai didi

java - 同步多个线程编辑Hashmap

转载 作者:行者123 更新时间:2023-12-02 11:08:02 24 4
gpt4 key购买 nike

我想让一个线程等待另一个线程完成对 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 映射)中删除元素有关。

您可以遵循的方法很少:

  • 记住要删除的项目,然后再删除
  • 使用迭代器移动并直接从 map 中删除

关于java - 同步多个线程编辑Hashmap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50786417/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com