我正在使用putIfAbsent将值添加到ConcurrentHashMap(如果它们还不作为原子操作存在)。

一切似乎都很好,但是我真的可以判断是否确实添加了新对象。

我最好的主意是检查putIfAbsent的返回值是否为null,只要我们从不将null值放入映射中(无论如何ConcurrentHashMap都不允许),就好像它应该工作,但我想知道是否存在我想念的东西。还是那是正确的方法?

最佳答案

在这种情况下,使用CHM的最佳方法是:

Object o = concurrentMap.get(key);

if(o == null){
   Object ret = concurrentMap.putIfAbsent(key, value);
   if(ret == null){
      o = ret;
   }
}
return o;


get调用是非阻塞的,因此您想尽可能地利用非阻塞的调用。如果正在调用putIfAbsent,则连续调用可能会降低性能。

10-01 09:15