Java 线程安全-以列表为值的并发hashmap

Java 线程安全-以列表为值的并发hashmap,java,multithreading,concurrency,thread-safety,Java,Multithreading,Concurrency,Thread Safety,我将我的地图定义为: Map<String, List<String>> results = new ConcurrentHashMap<>(); Map results=new ConcurrentHashMap(); 在添加(多个线程将执行哪些操作)时,我执行以下操作: results.putIfAbsent(“foo”,Collections.synchronizedList(newarraylist()); 结果。获取(“foo”)。添加(“bar

我将我的地图定义为:

Map<String, List<String>> results = new ConcurrentHashMap<>();
Map results=new ConcurrentHashMap();
在添加(多个线程将执行哪些操作)时,我执行以下操作:

results.putIfAbsent(“foo”,Collections.synchronizedList(newarraylist());
结果。获取(“foo”)。添加(“bar”);
或java 8的等效版本:

results.computeIfAbsent(
    "foo", 
    k -> Collections.synchronizedList(new ArrayList<>())
).add("bar");
results.computeFabSent(
“福”,
k->Collections.synchronizedList(新的ArrayList())
)。加入(“酒吧”);

我正在做的是线程安全的吗?

您显示的代码没有任何明显的线程问题,因为您使用的集合是线程安全的。整个程序是否线程安全取决于程序中的其他代码

results.computeIfAbsent(
    "foo", 
    k -> Collections.synchronizedList(new ArrayList<>())
).add("bar");