(来自维基百科)
//延迟初始化:
public class Singleton {
private static volatile Singleton instance = null;
private Singleton() { }
public static Singleton getInstance() {
if (instance == null) {
synchronized (Singleton.class){
if (instance == null) {
instance = new Singleton();
}
}
}
return instance;
}
}
//渴望初始化:
public class Singleton {
private static final Singleton instance = new Singleton();
private Singleton() {}
public static Singleton getInstance() {
return instance;
}
}
“如果程序使用类,但可能不是单例实例本身,那么您可能需要切换到延迟初始化。”
1 - 不确定我明白了。为什么程序不应该使用类?为什么我不能通过添加属性/方法来解决它?恒定的参考应该如何改变?
2 - 在延迟初始化中 - 假设发生多线程,同步 getInstance() 而不是代码块(摆脱双重检查)如何影响我的程序?
谢谢你。