保证一个类仅有一个实例,并提供一个访问它的全局访问点。
饿汉式单例模式
//饿汉式单例模式public class Singleton(){ private Singleton(){} private static Singleton singleton = new Singleton(); public static Singleton getInstance(){ return singleton; } }
懒汉式单例模式(线程不安全)
public class Singleton(){ private Singleton(){} private static Singleton singleton; public static Singleton getInstance(){ if(singleton == null){ singleton = new Singleton(); } return singleton; }}
懒汉式单例模式(线程安全)
public class Singleton(){ private Singleton(){} private static Singleton singleton; public static synchronized Singleton getInstance(){ if(singleton == null){ singleton = new Singleton(); } return singleton; }}//在方法上加锁虽然保证了线程安全,但每次调用该方法都必须同步,有时会造成没有必要的消耗
双重检查模式(DCL)
public class Singleton(){ private volatile static Singleton singleton; private Singleton(){} public static Singleton getInstance(){ if(singleton == null){ synchronized(Singleton.class){ singleton = new Singleton(); } return singleton; } }}//只有单例为空的情况下才加锁同步