第一种 懒汉模式 懒加载
特点 1.私有构造器
2.自身返回对象
3.类加载器不会创造对象,调用方法懒加载生成对象
public class Singleton {
// volatile,就是为了保证线程间的可见性和防止指令重排
private volatile static Singleton instance; //①
private Singleton() { //②
}
public static Singleton getInstance() {
if (instance == null) {//③
synchronized (Singleton.class) {
if (instance == null) {//④
instance = new Singleton();//⑤
}
}
}
return instance;
}
}
第二种 饿汉模式预加载
特点 1.私有构造方法
2.自身创建对象,自己返回
public class Singleton {
private static final Singleton instance = new Singleton();// ①
private Singleton(){}
public static Singleton getInstance(){
return instance;
}
}
第三种 静态内部类
public class Singleton {
private static class SingletonHolder {
private static Singleton instance = new Singleton();
}
private Singleton(){}
public static Singleton getInstance() {
return SingletonHolder.instance;
}
}
第四种 枚举
public enum Singleton {
/**
* 单例实例
*/
INSTANCE;
public void doSomeThing(){
System.out.println("done");
}
}