//单例饿汉public class Singleton01 { private static final Singleton01 INSTANCE = new Singleton01(); private Singleton01() { } public static Singleton01 getInstance() { return INSTANCE; }}
public class Singleton02 { private volatile static Singleton02 INSTANCE; //为什么要应用volatile //执行构造方法和赋值的操作可能会指令重排序,并发状况下可能有两个对象被初始化 //故应用volatile,禁止指令重排序,保障线程平安 private Singleton02() {} public static Singleton02 getInstance() { if (INSTANCE == null) { synchronized (Singleton02.class) { if (INSTANCE == null) { INSTANCE = new Singleton02(); } } } return INSTANCE; }}
public class Singleton03 { private Singleton03() { } //动态外部类自带懒加载 private static class SingletonHolder { private static Singleton03 INSTANCE = new Singleton03(); } public static Singleton03 getInstance() { return SingletonHolder.INSTANCE; }}
public enum Singleton04 { //枚举 INSTANCE;}