单例模式之懒饿汉模式简介
单例模式的概念:
单例模式的意思就是只有一个实例。单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。这个类称为单例类。
关键点:
1)一个类只有一个实例,这是最基本的
2)它必须自行创建这个实例
3)它必须自行向整个系统提供这个实例
两种实现方式:懒汉式和饿汉式单例模式
双重检查锁(DCL)实现单例模式,虽然解决了线程不安全的问题,以及保证了资源的懒加载,在需要的时候,才会进行实例化的操作。
但是在某些情况下(比如JDK低于1.5)会出现DCL失效,所以有一种很简洁且依旧是懒加载的方法实现单例模式。写法如下所示:
1 1 public class Singleton {//懒汉式单例模式 2 2 private static Singleton singleton = null; 3 3 4 4 public Singleton() { 5 5 } 6 6 7 7 public static synchronized Singleton getSingleton() { 8 8 if (singleton == null) { 9 9 singleton = new Singleton(); 10 10 } 11 11 return singleton; 12 12 } 13 13 public static class EhSingleton{//饿汉式单例模式 14 14 private static EhSingleton eh = new EhSingleton(); 15 15 public EhSingleton(){} 16 16 public static EhSingleton getEhSingleton(){ 17 17 return eh; 18 18 } 19 19 } 20 20 public static class Doubleli {//懒汉式实现单例模式使用双重加锁机制 21 21 private static volatile Doubleli dl = null; 22 22 public Doubleli(){} 23 23 public static Doubleli getInstance(){ 24 24 if(dl == null){ 25 25 synchronized (Doubleli.class) { 26 26 if(dl == null){ 27 27 dl = new Doubleli(); 28 28 } 29 29 } 30 30 } 31 31 return dl; 32 32 } 33 33 } 34 34 }