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 = new String();
09.  
10.            map.put(name, x);
11.  
12.        }
13.  
14.        return x;
15.    }


如果你只调用get(),或只调用put()时,ConcurrentHashMap是线程安全的。
但是,在你调用完get后,调用put之前,
如果有另外一个线程调用了map.put(name, x),
你再去执行map.put(name,x),
就很可能把前面的操作结果覆盖掉了。
所以,即使在线程安全的情况下,
你还是有可能违反原子操作的规则。


原文地址:https://www.cnblogs.com/sunwei2012/p/1903439.html