ConcurrentHashMap 是否支持 check-then-act 序列还是我需要锁定自己?示例:
Map<String,List<Integer>> map = new ConcurrentHashMap<>();
void insertVal(String key, int value){
if( map.containsKey(key)){
map.get(key).add(value);
}else{
List<Integer> list = new ArrayList<>();
list.add(value);
map.put(key,list);
}
}
如果值不存在,
putIfAbsent
就会计算值,这意味着该流程不可行,而putIfPresent
仅当值存在时才计算。
感谢您的帮助。
ConcurrentHashMap.compute
:
尝试计算指定键及其当前映射值的映射(如果没有当前映射,则为 null)。整个方法调用是原子执行的。在计算过程中,其他线程尝试对此映射进行的某些更新操作可能会被阻止,因此计算应该简短,并且不得尝试更新此映射的任何其他映射。
computeIfPresent
和computeIfAbsent
。