Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ConcurrentModificationException尝试复制工作映射_Java_Multithreading_Synchronization_Concurrentmodification - Fatal编程技术网

Java ConcurrentModificationException尝试复制工作映射

Java ConcurrentModificationException尝试复制工作映射,java,multithreading,synchronization,concurrentmodification,Java,Multithreading,Synchronization,Concurrentmodification,我正在处理一个长时间运行的任务,该任务有一个线程,该线程应该检查并打印工作线程中对象的状态,我有以下内容 在工作线程HashMap中,一些东西正在被主动读/写,在我的状态线程中,我有 Map<A, B> someStuffCopy; synchronized ( someStuff ) { someStuffCopy = new HashMap<A, B>( someStuff ); } 地图复制; 同步(某些东西) { someStuffCopy=新HashM

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

在工作线程
HashMap中,一些东西正在被主动读/写,在我的状态线程中,我有

Map<A, B> someStuffCopy;
synchronized ( someStuff )
{
    someStuffCopy = new HashMap<A, B>( someStuff );
}
地图复制;
同步(某些东西)
{
someStuffCopy=新HashMap(someStuff);
}
在我总是在synchronized块中的行上遇到
ConcurrentModificationException
之前,这可以工作几个周期

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


如何修复该异常?

您没有显示足够的代码来诊断该问题,但使用threadsafe映射实现可能会修复该问题:

someStuff = new ConcurrentHashMap<>();

Map<A, B> someStuffCopy;
synchronized ( someStuff ) {
    someStuffCopy = new ConcurrentHashMap<A, B>( someStuff );
}
someStuff=new ConcurrentHashMap();
地图复印件;
同步(某些东西){
someStuffCopy=新的ConcurrentHashMap(someStuff);
}

取决于您在其他地方所做的工作,可能只对参数
something
使用
ConcurrentHashMap
就足够了。

Matt,什么类型的
A
B
?另外,您是否在其他地方迭代
某些东西?另外,
someStuff
在初始填充后是否需要更改?A和B不重要,如前所述,someStuff正在被主动读/写,没有其他迭代。ConcurrenthashMap解决了这个问题。
synchronized
只有在所有访问资源的代码都将使用它时才有帮助。它不防止任意访问,它只排除同一对象上的代码同步。在中进行1m以上的迭代,没有异常,看起来这样就可以了。谢谢你,好心的先生。干杯。也请尝试删除同步块。
someStuffCopy
也不需要是
ConcurrentHashMap
实例,因为它只从中读取,从不修改。