- 一进程里
public class Singleton {
private static volatile Singleton singleton;
private Singleton() {}
public static Singleton getInstance() {
if (singleton == null) {
synchronized (Singleton.class) {
if (singleton == null) {
singleton = new Singleton();
}
}
}
return singleton;
}
}//
两次singleton判空,保证线程安全
;延迟加载
public class Singleton {
private Singleton() {}
private static class Holder {
private static final Singleton INSTANCE = new Singleton();
}
public static Singleton getInstance() {
return Holder.INSTANCE;
}
}/*static InnerClass同饿汉式采用了类装载的机制保证初始化实例时只有一个线程。饿汉式只要Singleton类被装载就会实例化,不Lazy-Loading,而静态内部类方式在Singleton类被装载时并不会立即实例化,类的静态属性只会在第一次加载类的时候初始化,JVM帮助我们保证了线程的安全性,在类进行初始化时,别的线程是无法进入的。 线程安全,延迟加载*/
public enum Singleton { INSTANCE;
public void method() { }
} //ENUM, 且能防反序列化重建新对象