我正在处理一个长时间运行的任务,该任务具有一个线程,该线程应检查并打印工作线程中对象的状态,我有以下内容
在工作线程HashMap<A,B> someStuff
中正在积极地对其进行读写,在我的状态线程中,我有
Map<A, B> someStuffCopy;
synchronized ( someStuff )
{
someStuffCopy = new HashMap<A, B>( someStuff );
}
在我总是在同步块(synchronized block)中的行上遇到
ConcurrentModificationException
之前,这需要几个周期。我的方法可能完全错了,但是我希望能够复制工作集,应用一些中间转换,然后打印出统计数据。
什么会解决该异常?
最佳答案
您没有显示足够的代码来诊断问题,但是使用线程安全的Map实现很可能可以解决该问题:
someStuff = new ConcurrentHashMap<>();
Map<A, B> someStuffCopy;
synchronized ( someStuff ) {
someStuffCopy = new ConcurrentHashMap<A, B>( someStuff );
}
根据您在其他地方执行的操作,可能仅将
ConcurrentHashMap
用作参数someStuff
就足够了。关于java - ConcurrentModificationException尝试复制工作图,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35007626/