学习单例(singleton)模式的收获

单例模式的特点:
  • 单例类只能有一个实例。
  • 单例类必须自己创建自己的唯一实例。
  • 单例类必须给所有其他对象提供这一实例。

实现单例模式总结有4种方法

 

 

1)传说中的饿汉式

饿汉也就是很饥渴,很想快速占有一切,所以饿汉单例就是在类初始化的时候就将单例对象创建了。

 

2)双重检查加锁

这种方式我以前自己在优化代码的时候用过,但不知道这就是传说中的双重检查加锁,JDK1.5之后可以用,但效率也不是很高。主要是不对单例方法加锁,而是在方法内部加锁,并且锁内部再加一层判断。

  1.         if(instance == null){ 
  2.             //同步块,线程安全的创建实例 
  3.             synchronized (Singleton.class) { 
  4. //再次检查实例是否存在,如果不存在才真正的创建实例 
  5.                 if(instance == null){ 
  6.                     instance = new Singleton(); 
  7.                 } 
  8.             } 
  9.         }

 

3)Lazy initialization holder class模式

 

主要利用类级内部类来实现延迟加载,然后由JVM保证线程安全

  1. public class Singleton { 
  2.      
  3.     private Singleton(){} 
  4.     /**
  5.      *    类级的内部类,也就是静态的成员式内部类,该内部类的实例与外部类的实例
  6.      *    没有绑定关系,而且只有被调用到时才会装载,从而实现了延迟加载。
  7.      */ 
  8.     private static class SingletonHolder{ 
  9.         /**
  10.          * 静态初始化器,由JVM来保证线程安全
  11.          */ 
  12.         private static Singleton instance = new Singleton(); 
  13.     } 
  14.      
  15.     public static Singleton getInstance(){ 
  16.         return SingletonHolder.instance; 
  17.     } 

4)利用枚举实现

这个不想多说,自己可以上百度查查,说多了大家接受不了

 

 

 

详细可以参考:http://blog.csdn.net/m13666368773/article/details/7679343

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值