是否可以通过键同步ConcurrentHashMap更新?

时间:2019-05-15 04:19:17

标签: java concurrency concurrenthashmap

我在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
        }
    }

例如,当一个线程使用键“ A”调用updateData时,则应阻塞其他尝试使用键“ A”调用updateData的尝试,直到完成第一个线程为止。同时,我希望另一个线程尝试同时使用键“ B”调用updateData

我想知道是否有任何花哨的方法可以简单地用其键锁定hashMap。

1 个答案:

答案 0 :(得分:1)

我认为您正在寻找compute method

它需要一个具有键和当前值(如果没有值,则为null)的函数,并且可以计算新值。

ConcurrentHashMap保证对于给定的键,只能同时运行一个这样的函数。并发的第二个呼叫将阻塞,直到准备就绪。