【发布时间】:2012-08-12 11:41:25
【问题描述】:
(来自维基百科)
//延迟初始化:
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() 而不是代码块(摆脱双重检查)如何影响我的程序,假设发生多线程?
谢谢。
【问题讨论】:
标签: java synchronization singleton lazy-loading eager-loading