这个问题实际上是指一个不同的问题,因为它可能没有很好地表述,所以它被关闭为重复。
对于此代码示例(在多线程环境中),什么是有效的替代惰性初始化习惯用法而不是双重检查锁定:
public class LazyEvaluator {
private final Object state;
private volatile LazyValue lazyValue;
public LazyEvaluator(Object state) {
this.state = state;
}
public LazyValue getLazyValue() {
if (lazyValue == null) {
synchronized (this) {
if (lazyValue == null) {
lazyValue = new LazyValue(someSlowOperationWith(state), 42);
}
}
}
return lazyValue;
}
public static class LazyValue {
private String name;
private int value;
private LazyValue(String name, int value) {
this.name = name;
this.value = value;
}
private String getName() {
return name;
}
private int getValue() {
return value;
}
}
}
编辑更新以包括一个缓慢的操作并添加了关于多线程环境的明确提及