有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

ConcurrentHashMap的java锁定值对象

在本帖中: Can we use Synchronized for each entry instead of ConcurrentHashMap?

我问我们是否可以使用Synchronized block只锁定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) 个答案

  1. # 1 楼答案

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