fee*_*ing 12 java treemap concurrentmodification
我正在调用返回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;
}
Run Code Online (Sandbox Code Playgroud)
我的调用代码是:
Map<String, String> key_values =Collections.synchronizedMap(Classname.function1());
//here key_values.put() giving ConcurrentModificationException
Run Code Online (Sandbox Code Playgroud)
Bri*_*ian 14
请注意,如果您使用的是迭代器,Collections.synchronizedMap则永远不会保护您免受并发修改.此外,除非您Map从多个线程访问您,否则创建同步映射是没用的.不需要将本地范围的集合和变量传递给其他线程synchronized.
我的猜测是,在你离开了代码,你遍历之一Map.entrySet,Map.keySet或Map.values,并呼吁put 在该迭代(在内部for循环).使用您显示的代码,这是唯一可能发生的方式.
如果你使用ConcurrentSkipListMap可以更快并且没有这个问题.
public NavigableMap<String, String> function1() {
NavigableMap<String, String> key_values = new ConcurrentSkipListMap<String, String>();
// all key_values.put() goes here
return key_values;
}
Run Code Online (Sandbox Code Playgroud)
如果您不需要对键进行排序,则可以使用ConcurrentHashMap.
| 归档时间: |
|
| 查看次数: |
8908 次 |
| 最近记录: |