我将 Java 地图声明为
Map<String, String> map = Collections.synchronizedMap(new HashMap<String, String>());
处理并发问题,并在地图上同步所有操作。但是,我读到同步在synchronizedMap
当操作是原子的时。我检查了Java API,HashMap的文档似乎没有提到哪些是原子的,所以我不确定哪些是原子的。
我正在同步以下对地图的调用:
map.size()
map.put()
map.remove()
map.get()
但如果有些是原子的,那么似乎这些同步就没有必要了。哪些是原子的?
同步映射顾名思义就是同步的。其上的每个操作相对于其上的任何其他操作都是原子的。
您可以将其视为同步映射的每个方法都是用synchronized
关键词。
请记住,虽然单个操作是原子的,但如果将它们组合起来,它们就不再是原子的,例如:
String value = map.get("key");
map.put("key", value+"2");
不等同于您的自定义同步代码:
synchronized (map) {
String value = map.get("key");
map.put("key", value+"2");
}
反而:
synchronized (map) {
String value = map.get("key");
}
synchronized (map) {
map.put("key", value+"2");
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)