ConcurrentHashmap使用问题
再补充下哈
虽然ConcurrentHashMap是线程安全的,
看看下面一段代码:Java代码
01.ConcurrentHashMap map;02.String getString(String name) {03.04.String x = map.get(name);05.06.if(x ==null) {07.08.x =newString();09.10.map.put(name, x);11.12.}13.14.returnx;15.}
如果你只调用get(),或只调用put()时,ConcurrentHashMap是线程安全的。
但是,在你调用完get后,调用put之前,
如果有另外一个线程调用了map.put(name, x),
你再去执行map.put(name,x),
就很可能把前面的操作结果覆盖掉了。
所以,即使在线程安全的情况下,
你还是有可能违反原子操作的规则。
浙公网安备 33010602011771号