package lhh.fight.designpattern; /** * Description:单例模式,常见的有懒汉模式,饿汉模式,双重锁模式 * @author 李**2019年9月21日 */ public class SingletonTest { public static void main(String[] args) { Singleton s1=Singleton.getInstance(); Singleton s2=Singleton.getInstance(); // 不能new一个Singleton因为构造函数不可见 // Singleton s3 = new Singleton(); System.out.println(s1==s2); } } class Singleton { /*//懒汉模式,线程不安全,延迟初始化 private static Singleton singleton; private Singleton() {} public static Singleton getInstance() { if(singleton == null) singleton = new Singleton(); return singleton; }*/ /*//饿汉模式,线程安全,常用,易产生垃圾,一开始就初始化 private static Singleton singleton = new Singleton(); private Singleton() {} public static Singleton getInstance() { return singleton; }*/ //双重锁模式,线程安全,延迟初始化 private volatile static Singleton singleton; private Singleton() {} public static Singleton getInstance() { if(singleton == null) { synchronized(Singleton.class) { if(singleton==null) singleton = new Singleton(); } } return singleton; } }