A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 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. }
复制代码

7 个回复

倒序浏览
第一个明显比第二个效率高。
回复 使用道具 举报
第一个用到了双重判断,减少了判断次数!!第一个比第二个性能更高!!!
回复 使用道具 举报
第二个在判断完singleton为空之后就会初始化,之后锁都不要判断了
第一个的话 singleton就算初始化了 程序每次运行还是要判断锁 所以第二个效率较高
回复 使用道具 举报
老毕视频中有讲解道的,第一个更安全
回复 使用道具 举报
明显第二个方法效率高,
回复 使用道具 举报
恩,这个例子当时在视频中毕老师特别强调过,面试的时候会经常出现,至于实际开发我就不清楚了,以为我还没有学那么多,慢慢在看吧,不过我确定,后者应用范围更广
回复 使用道具 举报
昨天看到一个DCl的失效问题   有时间你可以百度一下  
第一种有可能会出问题的  jdk1.5的 volatile关键字修饰 修复这个问题  
private volatile static Singleton1 singleton = null;  
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马