并发:HashMap和Lists作为值

时间:2016-12-08 22:46:08

标签: java multithreading concurrency synchronized concurrenthashmap

假设我有一个Synchronized HashMap,它有一个String作为键,一个List 作为一个值。

Map<String, List<Object>> map = Collections.synchronizedMap(new HashMap<String, List<Object>>());

该列表是否是线程安全的?例如,如果我这样做:

List<Object> list = map.get("whatever"); // Supposing I get a List
list.add(new Object()); // Would this be thread-safe?

如果没有,是否使用ConcurrentHashMap而不是同步的?或者避免竞争条件的唯一方法是将其转换为CopyOnWriteArrayList?

1 个答案:

答案 0 :(得分:4)

Collections.synchronizedMap只会为生成的地图提供线程安全性。如果您想使地图值线程安全,为什么不装饰您的列表,如:

Collections.synchronizedList(yourList)

然后将它们添加到地图中?