java - Java HashMap 中的 ConcurentModificationException

标签 java concurrency thread-safety hashmap

假设我的类中有两个方法,writeToMap()processKey()并且这两个方法都被多个线程调用。 writeToMap是一种在 hashmap 和 processKey() 中写入内容的方法用于根据 keySet 做某事的 HashMap .

在 processKey 中,我首先复制了 originalMap在获取 key 集之前。

new HashMap<String, Map<String,String>(originalMap).get("xx").keySet();

但我仍然得到 ConcurrentModificationException即使我总是复制 HashMap 。有什么问题吗?

最佳答案

HashMap 的复制构造函数执行一个(隐藏的)iteration在正在复制的 map 上(原始 map )。如果在迭代过程中 originalMap 被另一个线程修改,您可能会得到一个 ConcurrentModificationException。

关于java - Java HashMap 中的 ConcurentModificationException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13852934/

相关文章:

java - 创建 Hibernate 对象的外部库

java - 使用 OpenGL 进行高斯模糊(不是纹理)

java - 我如何使用不同版本的java

opengl - HOpenGL关于Haskell中的其他线程和TChans的行为如何?

java - 阻止 Java 应用程序退出,直到 ThreadPool 为空

c++ - 删除 vector<vector<Class>> 线程安全吗?

java - 如何像 Vector 一样将 ArrayList 大小增加到 100%

JAVA货币兑换

java - 线程和可变参数

javascript - 每个已解决的 Promise.map 和回调