Java 是否可以通过它同步ConcurrentHashMap更新';钥匙是什么?

Java 是否可以通过它同步ConcurrentHashMap更新';钥匙是什么?,java,concurrency,concurrenthashmap,Java,Concurrency,Concurrenthashmap,我在ConcurrentHashMap上有大量的更新操作,我需要最小化更新此映射的同步 请参阅下面的代码 public ConcurrentHashMap<String, Integer> dataMap = new ConcurrentHashMap<>(); public void updateData(String key, int data) { if ( dataMap.containsKey(key)) { /

我在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
        }
    }
公共ConcurrentHashMap数据映射=新ConcurrentHashMap(); public void updateData(字符串键,int数据){ if(dataMap.containsKey(键)){ //使用以前的值和新值执行某些操作并更新它 } } 例如,当一个线程使用键“A”调用
updateData
,那么每隔一次尝试使用键“A”调用
updateData
,都应该被阻止,直到第一个线程完成。同时,我希望另一个线程尝试调用键为“B”的
updateData
,并同时运行


我想知道是否有什么奇特的方法可以简单地用它的键锁定hashMap。

我想您正在寻找

它接受一个给定键和当前值的函数(如果还没有值,则为
null
),并可以计算新值


ConcurrentHashMap保证对于给定的键,只有一个这样的函数同时运行。同时进行的第二次调用将被阻止,直到准备就绪。

如果不同步,是否存在任何问题?我猜ConcurrentHashMap的
put
操作在内部对段使用
同步。您不必明确地执行此操作。如果使用
computeIfPresent
,则同步是通过单键iiuc进行的。