提问者:小点点

并发:HashMap和列表作为值


假设我有一个同步HashMap,它有一个字符串作为键,一个列表作为值。

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?

如果不是这样,它会使用并发HashMap而不是同步的吗?或者避免竞争条件的唯一方法是将其转换为CopyOnWriteArrayList?


共1个答案

匿名用户

Collection. synizedMap只会为生成的映射提供线程安全性。如果您想使映射值线程安全,为什么不装饰您的列表,例如:

Collections.synchronizedList(yourList)

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