我正在处理一个长期运行的任务,该任务有一个应检查并打印工作线程中对象状态的线程,我有以下内容
在正在读取/写入工作线程HashMap<A,B> someStuff
中,在我的状态线程中我有
Map<A, B> someStuffCopy;
synchronized ( someStuff )
{
someStuffCopy = new HashMap<A, B>( someStuff );
}
在我总是在 synchronized 块的行上遇到ConcurrentModificationException
之前,这可以工作几个周期。
我的方法可能完全错误,但我希望能够获取工作集的副本,应用一些中间转换,然后打印出统计数据。
什么可以修复异常?
答案 0 :(得分:3)
您还没有显示足够的代码来诊断问题,但使用线程安全的Map实现可能会修复它:
someStuff = new ConcurrentHashMap<>();
Map<A, B> someStuffCopy;
synchronized ( someStuff ) {
someStuffCopy = new ConcurrentHashMap<A, B>( someStuff );
}
根据您在其他地方所做的事情,可能只需使用ConcurrentHashMap
参数someStuff
即可。