【发布时间】:2011-09-08 01:30:56
【问题描述】:
如果可能,我想避免锁定读取。但这“感觉”就像双重检查锁定,即使没有涉及部分初始化的成员。
这是一个好的结构吗?
private final Map<String, Stuff> stash = new HashMap<String, Stuff>();
public Stuff getStuff(String name) {
if (stash.containsKey(name))
return stash.get(name);
synchronized(stash) {
if (stash.containsKey(name)) {
return stash.get(name);
}
else {
Stuff stuff = StuffFactory.create(name);
stash.put(name, stuff);
return stuff;
}
}
}
【问题讨论】:
-
你应该使用 Guava 的 MapMaker 之类的东西,除非这是为了好玩。
标签: java multithreading concurrency locking hashmap