我看到了很多有关Java ConcurrentHashMap使用的信息,有些说法相反。我希望我的问题能够帮助澄清一些看似简单(但实际上需要最新答案)的问题。
我有一个像这样的映射:
ConcurrentHashMap<Integer, ClassA> map = new ConcurrentHashMap<Integer, ClassA>()
我正在使用ConcurrentHashMap来保证put和get操作的线程安全性。我的ClassA有一些整数/字符串属性和一个字符串集合。
现在我想知道如何安全地更新我的映射对象。如果我想创建一个方法通过添加新的字符串来更新我的map中的对象,我会有类似下面的代码:
synchronized(map)
{
Collection<String> strings = map.get(id).getStrings();
if(!strings.contains(newString)) //strings can't be null
{
strings.add(newString);
}
}
这段代码在并发读写时是否安全?是否可以使用Java API进行不同的处理?