У меня есть тонны операции обновления в 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
}
}
Например, когда один поток вызывает updateData
с ключом «A», то любая другая попытка вызова updateData
с ключом «A» должна быть заблокирована до завершения первого потока.Между тем, я хочу, чтобы другой поток, пытающийся вызвать updateData
с ключом "B", работал одновременно.
Интересно, есть ли какой-нибудь причудливый способ заблокировать hashMap просто его ключом.