ConcurrentModificationException尝试复制工作映射

时间:2016-01-26 05:38:45

标签: java multithreading synchronization concurrentmodification

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

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

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

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

我的方法可能完全错误,但我希望能够获取工作集的副本,应用一些中间转换,然后打印出统计数据。

什么可以修复异常?

1 个答案:

答案 0 :(得分:3)

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

someStuff = new ConcurrentHashMap<>();

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

根据您在其他地方所做的事情,可能只需使用ConcurrentHashMap参数someStuff即可。