DCL双重检查锁
class Singleton {
private Singleton() {
}
private static volatile Singleton singleton;
public static Singleton getInstance() {
if (singleton == null) {
synchronized (Singleton.class) {
if (singleton == null) singleton = new Singleton ();
}
}
return singleton;
}
}
静态内部类
class Singleton {
private Singleton() {
}
private static class SingletonFactory {
private static Singleton singleton = new Singleton ();
}
public static Singleton getInstance() {
return SingletonFactory.singleton;
}
public Object readResolve() {
return getInstance ();
}
}