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