1

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

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

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

ConcurrentModificationException但是即使我总是复制哈希图,我仍然会得到。有什么问题?

4

2 回答 2

3

HashMap 的复制构造函数在被复制的地图(originalMap)上执行(隐藏)迭代。如果在此迭代过程中 originalMap 被另一个线程修改,您可能会收到 ConcurrentModificationException。

于 2012-12-13T05:56:21.487 回答
2

您有嵌套的地图,并且您正在复制外部地图,然后再从中获取内部地图。请注意,内部映射尚未被复制,因此当您对其进行迭代时,您仍在使用共享数据结构。

根据简短的代码片段很难说,但我认为您不需要复制外部地图,您确实需要复制内部地图。

于 2012-12-13T04:27:16.953 回答