尝试复制工作地图的 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
就足够了。
我正在处理一个很长的 运行 任务,它有一个线程应该检查并打印工作线程中对象的状态,我有以下内容
在工作线程中 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
就足够了。