public class Singleton { private static Singleton instance = null; private Singleton() { } /* * 懒汉单例模式,线程不安全 */ public static Singleton getInstanceLazy() { if (instance == null) { instance = new Singleton(); } return instance; } /* * 同步单例模式1,线程安全,浪费时间,需要判断同步锁 */ public static synchronized Singleton getInstanceSync1() { if (instance == null) { instance = new Singleton(); } return instance; } /* * 同步单例模式2,线程安全,浪费时间,需要判断同步锁 */ public static Singleton getInstanceSync2() { synchronized (Singleton.class) { if (instance == null) { instance = new Singleton(); } } return instance; } /* * 双重校验单例模式,并发量不多,安全性不高的情况下使用,可能出现JVM编译过程中,指令重排的优化过程,导致 * 对象还没有初始化,就分配了空间,也就是说instance!=null,但是却没有初始化 */ public static Singleton getInstanceDoubleSync() { if (instance != null) { synchronized (Singleton.class) { if (instance == null) { instance = new Singleton(); } } } return instance; } /* * 内部类单例模式,线程安全,延迟加载,(内部静态类会延迟加载,即用到的时候再显示) */ private static class SingletonHolder { private static Singleton singleton = new Singleton(); } public static Singleton getInstanceInner(){ return SingletonHolder.singleton; } }
public enum SingletonEnum { /** * 1.从Java1.5开始支持; * 2.无偿提供序列化机制; * 3.绝对防止多次实例化,即使在面对复杂的序列化或者反射攻击的时候; */ instance; private String others; SingletonEnum() { } public void method() { System.out.println("SingletonEnum"); } public String getOthers() { return others; } public void setOthers(String others) { this.others = others; } }