【发布时间】:2019-10-02 03:32:34
【问题描述】:
我在 ConcurrentHashMap 上有大量更新操作,我需要最小化同步以更新此地图。
请看下面的代码。
public ConcurrentHashMap<String, Integer> dataMap = new ConcurrentHashMap<>();
public void updateData(String key, int data) {
if ( dataMap.containsKey(key)) {
// do something with previous value and new value and update it
}
}
例如,当一个线程使用键“A”调用updateData 时,应阻止其他所有尝试使用键“A”调用updateData 直到第一个线程完成。同时,我希望另一个线程尝试调用 updateData 并同时运行键“B”。
我想知道是否有任何奇特的方法可以简单地用它的键来锁定 hashMap。
【问题讨论】:
-
不同步有什么问题吗?我猜想 ConcurrentHashMap 的
put操作在内部使用synchronization在段上。你不必明确地这样做 -
如果使用
computeIfPresent,则同步通过单键iiuc。
标签: java concurrency concurrenthashmap