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

在工作线程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/

10-10 11:06