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 楼答案
只要您使用
putIfAbsent
操作,那么它将是线程安全的。您将始终在同一对象引用上同步(阻止)