//单例饿汉
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;
}
发表回复