我正在使用putIfAbsent将值添加到ConcurrentHashMap中,如果它们尚未作为原子操作存在。
这一切似乎都很好,但我真的能够确定是否实际添加了新对象。
我最好的想法是检查putIfAbsent的返回值是否为null,看起来它应该工作只要我们从不将空值放入映射(ConcurrentHashMap不允许反正)但我想知道如果有什么我错过了。或者这是正确的方法吗?
答案 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
可能会降低性能。