ConcurrentHashMap compute() 方法线程安全吗?

问题描述

concurrentHashMapInstance.compute("Name",(key,val) -> {
     modifyValWithComplexLogic(val); 
     return val;
});

对于modifyValWithComplexLogic(val)compute(以及整个val 方法)线程安全吗?

解决方法

总之,是的,但你仍然需要小心。

ConcurrentHashMap#compute 在它即将更新的节点上的 synchronized 块中运行重映射函数,因此如果重映射函数本身可能在另一个资源上很活跃,并且您在多个键上调用它,您可能应该自己同步它,而不是假设 ConcurrentHashMap 会为您同步。