【发布时间】:2015-01-10 23:08:31
【问题描述】:
我有以下代码:
public class Cache {
private final Map map = new ConcurrentHashMap();
public Object get(Object key) {
Object value = map.get(key);
if (value == null) {
value = new SomeObject();
map.put(key, value);
}
return value;
}
}
我的问题是:
映射的put 和get 方法是线程安全的,但是由于整个块不同步——多个线程可以添加相同的键两次吗?
【问题讨论】:
-
@Mureinik 的回答是一个更一般原则的具体示例:完全用线程安全组件构建系统不会使系统作为一个整体线程安全。
标签: java multithreading collections concurrency hashmap