码迷,mamicode.com
首页 > 其他好文 > 详细

Head First 单例模式

时间:2014-07-02 09:53:33      阅读:197      评论:0      收藏:0      [点我收藏+]

标签:单例模式   singleton   


单件模式确保一个类只有一个实例,并提供一个全局访问点。
适用于资源敏感的场景。

实现:
//经典实现方式,但是在多线程环境下就会出问题,
//可能连个线程同时进入了uniqueInstance==null那条控制路径
public class Singletion {
      private static Singletion uniqueInstance;

      private Singletion() {
     } //

      public static Singletion getInstance() {
           if (uniqueInstance == null) { // 延迟实例化,懒汉式
               uniqueInstance new Singletion();
          }
           return uniqueInstance ;
     }
}
-----
//对方法加锁,同步线程对其的调用
//但是只有第一次执行getInstance时,才真正需要同步,其他时候都是对性能的损耗
public class Singletion2 {
      private static Singletion2 uniqueInstance;

      private Singletion2() {
     }

      // 每次都需要同步
      public static synchronized Singletion2 getInstance() {
           if (uniqueInstance == null) {
               uniqueInstance new Singletion2();
          }
           return uniqueInstance ;
     }
}
----------
//使用“急切”创建实例(饿汉式),JVM会在线程方位这个静态变量之前,一定先创建这个实例,所以线程安全。
//缺点是不是在需要的时候才创建实例
public class Singletion3 {
      private static Singletion3 uniqueInstance = new Singletion3();

      private Singletion3() {
     }

      // 每次都需要同步
      public static synchronized Singletion3 getInstance() {
           return uniqueInstance ;
     }
}
-------
//利用双重检查加锁,在getInstance方法中减少使用同步,用
public class Singletion4 {
      private static Singletion4 uniqueInstance;

      private Singletion4() {
     }

      // 每次都需要同步
      public static synchronized Singletion4 getInstance() {
           if (uniqueInstance == null) {
               uniqueInstance new Singletion4();
          }
           return uniqueInstance ;
     }
}

Head First 单例模式,布布扣,bubuko.com

Head First 单例模式

标签:单例模式   singleton   

原文地址:http://blog.csdn.net/vonzhoufz/article/details/36185755

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!