懒汉式
public class Singleton {
private static Singleton singleton;
private Singleton() {} //此类不能被实例化
public static synchronized Singleton getInstance() {
if (singleton == null) {
singleton = new Singleton();
}
return singleton;
}
}
优点:延迟加载
缺点:加锁,影响性能
懒汉式dcl
public class Singleton {
private static volatile Singleton singleton;
private Singleton() {} //此类不能被实例化
public static Singleton getInstance() {
if (singleton == null) {
synchronized (Singleton.class) {
singleton = new Singleton();
}
}
return singleton;
}
}
用synchronized和volatile加锁,影响性能
饿汉式
public class Singleton {
private static Singleton singleton = new Singleton();
private Singleton() {} //此类不能被实例化
public static Singleton getInstance() {
return singleton;
}
}
类加载时,就要初始化静态变量,对象初始化比较复杂,会导致程序初始化缓慢
静态内部类
public class Singleton {
private Singleton() {} //此类不能被实例化
private static class SingletonHolder {
private static final Singleton SINGLETON = new Singleton();
}
public static Singleton getInstance() {
return SingletonHolder.SINGLETON;
}
}
类加载时,不会加载内部类,做到了延时加载