判断putIfAbsent是否修改了ConcurrentHashMap的正确方法是什么?

时间:2017-01-25 16:36:53

标签: java concurrenthashmap

我正在使用putIfAbsent将值添加到ConcurrentHashMap中,如果它们尚未作为原子操作存在。

这一切似乎都很好,但我真的能够确定是否实际添加了新对象。

我最好的想法是检查putIfAbsent的返回值是否为null,看起来它应该工作只要我们从不将空值放入映射(ConcurrentHashMap不允许反正)但我想知道如果有什么我错过了。或者这是正确的方法吗?

1 个答案:

答案 0 :(得分:3)

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

Object o = concurrentMap.get(key);

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

get次呼叫是非阻止的,因此您希望尽可能多地利用非阻止呼叫。如果调用了许多,则连续调用putIfAbsent可能会降低性能。