Java 是否可以通过它同步ConcurrentHashMap更新';钥匙是什么?
我在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)) { /
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进行的。