【发布时间】:2016-07-20 16:10:32
【问题描述】:
在这篇文章中: Can we use Synchronized for each entry instead of ConcurrentHashMap?
我问我们是否可以使用同步块来仅锁定 HashMap 的条目,我了解到我们不能。现在,我的问题是,如果我们有一个具有 ArrayList 或 TreeMap 类型值的 ConcurrentHashMap(不是 hashMap),那么我可以使用这种方法(使用同步)。我的意思是:
ConcurrentHashMap<String, ArrayList<String>> map = new ConcurrentHashMap<>();
synchronized (map.get("key")) {
//do something with the array thread-safely,
}
安全吗?我问的原因是我不知道如何通过测试来检查这类问题。
【问题讨论】:
-
安全吗? 除非我们知道您可能会对这些值做什么,否则我们无法回答。您的代码的另一部分是否单独使用它们?他们在访问它们之前是否锁定了相应的监视器?
-
你是对的。我的意思是它是线程安全的,如果我想访问 arraylist 时使用同步块?