我正在使用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
,则连续调用可能会降低性能。