锁定ConcurrentHashMap的值对象

时间:2016-07-20 16:10:32

标签: java hashmap

在这篇文章中: Can we use Synchronized for each entry instead of ConcurrentHashMap?

我问我们是否可以使用Synchronized块来仅锁定HashMap的条目,我知道我们不能这样做。现在,我的问题是,如果我们有一个ConcurrentHashMap(不是hashMap),其值为ArrayList或TreeMap,那么我可以使用该方法(使用synchronized)。这就是我的意思:

    ConcurrentHashMap<String, ArrayList<String>> map = new ConcurrentHashMap<>();




    synchronized (map.get("key")) {
        //do something with the array thread-safely, 

    }

安全吗?我问的原因是我不知道如何通过测试来检查这类问题。

1 个答案:

答案 0 :(得分:0)

只要您使用putIfAbsent操作,它就是线程安全的。您将始终在同一对象引用上进行同步(阻塞)。