가능한 경우 읽을 때 잠그지 않으려합니다. 그러나 부분적으로 초기화 된 멤버가 포함되어 있지 않더라도 이중 확인 잠금과 같은 "느낌"이 있습니다.해시 맵의 객체에 대한이 지연 초기화 패턴이 스레드로부터 안전한가요?
이것은 좋은 구조입니까?
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] (http://guava-libraries.googlecode.com/svn/trunk/javadoc/com/google/common/collect/MapMaker.html)와 같은 것을 사용해야합니다. –