问题描述
concurrentHashMapInstance.compute("Name",(key,val) -> {
modifyValWithComplexLogic(val);
return val;
});
对于modifyValWithComplexLogic(val)
,compute
(以及整个val
方法)线程安全吗?
解决方法
总之,是的,但你仍然需要小心。
ConcurrentHashMap#compute
在它即将更新的节点上的 synchronized
块中运行重映射函数,因此如果重映射函数本身可能在另一个资源上很活跃,并且您在多个键上调用它,您可能应该自己同步它,而不是假设 ConcurrentHashMap
会为您同步。