在this博客中:
清单10中的代码不使用同步并确保这一点 在对静态进行调用之前,不会创建Singleton对象 getInstance()方法。
上述报价不是假的吗?由于静态对象在类的早期初始化,如何在调用静态getInstance()
方法之前不创建对象?
答案 0 :(得分:4)
问题中引用的代码基本上是这样的:
class Singleton {
private static Singleton instance = new Singleton();
public static Singleton getInstance() {
return instance;
}
}
这个是线程安全的,因为实例不是延迟初始化的,而是在加载类时实例化一次。
类加载器强制执行自己的同步,以保证类初始化是线程安全的。