黑马程序员技术交流社区

标题: 为了解决懒汉式单例模式中的线程安全问题,下面这个两... [打印本页]

作者: zhang63    时间: 2014-6-3 14:19
标题: 为了解决懒汉式单例模式中的线程安全问题,下面这个两...
本帖最后由 zhang63 于 2014-6-3 14:25 编辑
  1. //方法1
  2. class Singleton1
  3. {
  4.         private static Singleton1 singleton = null;
  5.         private Singleton1() {}
  6.         
  7.         public static Singleton1 getInstance()
  8.         {
  9.                 if (singleton == null)
  10.                 {
  11.                         synchronized (Singleton1.class)
  12.                         {
  13.                                 if (singleton == null)
  14.                                         singleton = new Singleton1();
  15.                         }
  16.                 }
  17.                 return singleton;
  18.         }
  19. }
  20. //方法2
  21. class Singleton
  22. {
  23.     private static Singleton singleton = null;
  24.     private Singleton() {}
  25.     public static synchronized Singleton getInstance()
  26.     {
  27.          if(singleton==null)
  28.          {
  29.              singleton = new Singleton();
  30.          }
  31.         return singleton;
  32.     }
  33. }
复制代码

作者: yuZhe_toString    时间: 2014-6-3 14:27
第一个明显比第二个效率高。
作者: wyqs92    时间: 2014-6-3 14:44
第一个用到了双重判断,减少了判断次数!!第一个比第二个性能更高!!!
作者: blackstones1    时间: 2014-6-3 14:59
第二个在判断完singleton为空之后就会初始化,之后锁都不要判断了
第一个的话 singleton就算初始化了 程序每次运行还是要判断锁 所以第二个效率较高
作者: Lex    时间: 2014-6-3 20:13
老毕视频中有讲解道的,第一个更安全
作者: sheng6699    时间: 2014-6-3 20:30
明显第二个方法效率高,
作者: 淡淡柠檬茶    时间: 2014-6-3 20:59
恩,这个例子当时在视频中毕老师特别强调过,面试的时候会经常出现,至于实际开发我就不清楚了,以为我还没有学那么多,慢慢在看吧,不过我确定,后者应用范围更广
作者: 观决    时间: 2014-6-3 21:25
昨天看到一个DCl的失效问题   有时间你可以百度一下  
第一种有可能会出问题的  jdk1.5的 volatile关键字修饰 修复这个问题  
private volatile static Singleton1 singleton = null;  




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2