我正在调用返回TreeMap实例的函数,并且在调用代码中我想修改TreeMap。然而,我得到了一个ConcurrentModificationException。
下面是我的代码:
public Map<String, String> function1() {
Map<String, String> key_values = Collections.synchronizedMap(new TreeMap<String, String>());
// all key_values.put() goes here
return key_values;
}我的调用代码是:
Map<String, String> key_values =Collections.synchronizedMap(Classname.function1());
//here key_values.put() giving ConcurrentModificationException发布于 2012-12-18 14:47:29
请注意,如果您使用迭代器,Collections.synchronizedMap永远不会保护您免受并发修改。此外,除非您从多个线程访问Map,否则创建同步映射是无用的。没有传递给其他线程的局部作用域集合和变量不需要是 synchronized**.**
我的猜测是,在您省略的代码中,您正在迭代Map.entrySet、Map.keySet或Map.values之一,并在此迭代期间调用put (在for循环中)。使用您所展示的代码,这是唯一可能实现的方法。
https://stackoverflow.com/questions/13927572
复制相似问题