首页 > 编程语言 > 详细

线程安全的单例模式

时间:2014-04-24 04:35:31      阅读:493      评论:0      收藏:0      [点我收藏+]

  
                       线程安全的单例模式
                      ----------------------
经典的单例模式
 publicclass Singleton{
     privatestatic Singleton uniqueInstance;
     privatestaticSingleton(){}
     public  static Singleton getInstance(){
         if(uniqueInstance == null)
            uniqueInstance = new Singleton()
         return uniqueInstance;
     }
 }
经典的单例模式是线程不安全的,如果多个并发线程同时调用getInstance()方法就有可能生成多个实例。下面介绍几种实现线程安全的单例模式
使用synchronized修饰getInstance()方法
publicclass Singleton{
  privatestatic Singleton uniqueInstance;
  privatestaticSingleton(){}
  public  static synchronized Singleton getInstance(){
      if(uniqueInstance == null)
         uniqueInstance = new Singleton()
      return uniqueInstance;
  }
}
使用这种方法简单易懂但效率非常低,不推荐使用。
使用急切创建实例,而不使用延迟初始化
publicclass Singleton{
  privatestatic Singleton uniqueInstance = new Singleton();
  privatestaticSingleton(){}
  public  static Singleton getInstance(){
      return uniqueInstance;
 }
}
如果创建该实例不是那么昂贵的话,就使用该模式吧。
如果出于性能考虑而需要使用延迟初始化,就使用 lazy initialization holder class模式,这种模式也被称为initialize-demand holder class idiom,保证了实例要被创建的时候才初始化。
publicclass Singleton{
  privatestaticclass SingletonHolder{
     privatestatic Singleton uniqueInstance = new Singleton();
  }
  privatestaticSingleton(){}
  public  static Singleton getInstance(){
      return SingletonHolder.uniqueInstance;
 }
}
使用双重检测模式,即保证了同步,有不会降低明显的性能。
publicclass Singleton{
  privatestatic Singleton uniqueInstance;
  privatestaticSingleton(){}
  public  static Singleton getInstance(){
      if(uniqueInstance == null){
          asynchronized(Singleton.class){
              if(uniqueInstance == null){
                  uniqueInstance = new Singleton()
              }
          }
      }
 }
     return  uniqueInstance;
}
这几种模式推荐使用3或者4,更或者直接使用模式3,即保证了线程的安全,又没有任何性能的降低,而且提供了延迟初始化。

 

 

不支持Marketdown所以显示有点乱。

线程安全的单例模式,布布扣,bubuko.com

线程安全的单例模式

原文:http://www.cnblogs.com/ArtsCrafts/p/3684046.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!