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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 吴通 中级黑马   /  2012-8-24 20:28  /  1616 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class Single
{
private static Single s=null;
private Single(){}
public static Single getInstance()
{
  if(s==null)
  {
   synchronized(Single.class)
   {
    if(s==null)
    s=new Single();
   }
  }
  return s;
}
}
class SingleDemo
{
public static void main(String[] args)
{
  Single s1=Single.getInstance();
}
}

双重判断为什么能增加代码的运行效率?
虽然减少了锁的判断,但是也增加了if的判断啊

4 个回复

倒序浏览
很简单,你可以这样理解!

第一次:第一次判断s是否为null,是的话就进来同步代码块!不是的话进不去啦!

第二次:判断s是否为null,是的话就新建一个对象!

第三次:再判断s是否为null,因为上一步已经建立一个对象,所以不为null,所以来第一步都进不去!

综上所述:双重判断效率高
回复 使用道具 举报
比如说,A线程进来
  if(s==null)
       A(停在这儿)
    s=new Single();
   }
B线程进来了。到对象锁哪儿进不来,A醒来,初始化,B判断第二个 if(s==null),b不再初始化,C线程进来判断第一个 if(s==null),以后进来的线程都不满足第一个 if(s==null),都不再判断锁,所以增加代码的运行效率
回复 使用道具 举报
虽然少了判断锁,但是在判断锁之前不是还得判断s是否为null,这样不是相当于少了一个判断又加了一个判断?
回复 使用道具 举报
在这里影响效率的主要因素是对锁的判断,if else判断,对效率的影响比锁要小的多
通过外层if语句判断出是否能够 经过锁,
减少了锁的判断,也就提高了效率。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马