用静态内部类实现单例
public class SpecialSingleton {
// 静态内部类
private static class InnerClass {
private static SpecialSingleton instance;
static {//静态代码块只被初始化一次,并且虚拟机保证其线程安全。
instance = new SpecialSingleton();
}
}
//构造方法私有化
private SpecialSingleton() {
}
public static SpecialSingleton getInstance() {
return InnerClass.instance;
}
}
原理如上注释,这样就解决了只被初始化一次,并且线程安全。