假设我的类中有两个方法,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/