如果它们还没有作为原子操作存在,我正在使用putIfAbsend将值添加到并发HashMap。
这一切看起来都很好,但是我真的可以判断一个新对象是否真的被添加了。
我最好的想法是检查putIfAbsend的返回值是否为null,看起来只要我们从不将null值放入映射中就应该可以工作(无论如何,并发HashMap不允许),但我想知道我是否遗漏了一些东西。或者这是正确的方法吗?
在这种情况下,使用CHM的最佳方式如下:
Object o = concurrentMap.get(key);
if(o == null){
Object ret = concurrentMap.putIfAbsent(key, value);
if(ret == null){
o = ret;
}
}
return o;
get
调用是非阻塞的,因此您希望尽可能多地利用非阻塞调用。如果调用了很多,持续调用putIfAbsend
会降低性能。