/* 懒汉模式: 优点:节约了空间 缺点:线程不安全,反射破解问题 */ public class SingleTon { //使用懒汉模式 //使用volatile禁止指令集重排序 private static volatile SingleTon instance; private SingleTon() { synchronized (SingleTon.class) { if (instance != null) {//解决反射破解问题 throw new RuntimeException("不能使用反射创建实例化对象"); } } } public static SingleTon getInstance() { if (instance == null) {//提高代码执行效率 synchronized (SingleTon.class) {//多线程时,保证线程安全 if (instance == null) { instance = new SingleTon(); } } } return instance; } } /* 饿汉模式: 优点:线程安全 缺点:浪费空间,反射破解问题 */ class SingleTon1 { private static final SingleTon1 INSTANCE = new SingleTon1(); private SingleTon1() { synchronized (SingleTon1.class) { if (INSTANCE != null) { throw new RuntimeException("不能使用反射创建实例化对象"); } } } public static SingleTon1 getInstance() { return INSTANCE; } } /* 静态内部类(最常用的): 优点:线程安全,节约空间 缺点:反射破解问题 */ class SingleTon3 { private SingleTon3() { synchronized (SingleTon3.class) { if (Holder.INSTANCE != null) { throw new RuntimeException("不能使用反射创建实例化对象"); } } } static class Holder { private static final SingleTon3 INSTANCE = new SingleTon3(); } public static SingleTon3 getInstance() { return Holder.INSTANCE; } } /* 使用枚举的方式: 优点:线程安全,没有反射破解问题 缺点:浪费空间 */ enum SingleTon4 { INSTANCE; public static SingleTon4 getInstance() { return INSTANCE; } }