提问者:小点点

判断putIfAbsend是否修改了并发HashMap的正确方法是什么?


如果它们还没有作为原子操作存在,我正在使用putIfAbsend将值添加到并发HashMap。

这一切看起来都很好,但是我真的可以判断一个新对象是否真的被添加了。

我最好的想法是检查putIfAbsend的返回值是否为null,看起来只要我们从不将null值放入映射中就应该可以工作(无论如何,并发HashMap不允许),但我想知道我是否遗漏了一些东西。或者这是正确的方法吗?


共1个答案

匿名用户

在这种情况下,使用CHM的最佳方式如下:

Object o = concurrentMap.get(key);

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

get调用是非阻塞的,因此您希望尽可能多地利用非阻塞调用。如果调用了很多,持续调用putIfAbsend会降低性能。