具有内部类的Java Singleton - 什么保证了线程安全?
实现单例的一种常见 (1,2) 方法使用具有静态成员的内部类:
public class Singleton {
private static class SingletonHolder {
public static final Singleton instance = new Singleton();
}
public static Singleton getInstance() {
return SingletonHolder.instance;
}
private Singleton() {
//...
}
}
据说这个实现是懒惰初始化和线程安全的。但究竟是什么保证了它的螺纹安全呢?处理线程和锁的 JLS 17 没有提到静态字段具有任何发生在之前的关系。我如何确定初始化只会发生一次,并且所有线程都看到相同的实例?