ConcurrentHashMap 检查然后执行流程

问题描述 投票:0回答:1

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
仅当值存在时才计算。

感谢您的帮助。

java
1个回答
1
投票

听起来您正在寻找

ConcurrentHashMap.compute

尝试计算指定键及其当前映射值的映射(如果没有当前映射,则为 null)。整个方法调用是原子执行的。在计算过程中,其他线程尝试对此映射进行的某些更新操作可能会被阻止,因此计算应该简短,并且不得尝试更新此映射的任何其他映射。

注意还有相关方法

computeIfPresent
computeIfAbsent

© www.soinside.com 2019 - 2024. All rights reserved.