尝试复制工作地图的 ConcurrentModificationException

ConcurrentModificationException trying to copy a working map

我正在处理一个很长的 运行 任务,它有一个线程应该检查并打印工作线程中对象的状态,我有以下内容

在工作线程中 HashMap<A,B> someStuff 正在被主动读取/写入,在我的状态线程中我有

Map<A, B> someStuffCopy;
synchronized ( someStuff )
{
    someStuffCopy = new HashMap<A, B>( someStuff );
}

在我总是在 synchronized 块的行上遇到 ConcurrentModificationException 之前,这工作了几个周期。

我的方法可能完全错误,但我希望能够复制工作集,应用一些中间转换,然后打印出统计信息。

如何修复异常?

您没有显示足够的代码来诊断问题,但使用线程安全的 Map 实现可能会解决问题:

someStuff = new ConcurrentHashMap<>();

Map<A, B> someStuffCopy;
synchronized ( someStuff ) {
    someStuffCopy = new ConcurrentHashMap<A, B>( someStuff );
}

根据您在其他地方所做的事情,可能仅对参数 someStuff 使用 ConcurrentHashMap 就足够了。