黑马程序员技术交流社区
标题:
双重判断为什么能增加代码的运行效率?
[打印本页]
作者:
吴通
时间:
2012-8-24 20:28
标题:
双重判断为什么能增加代码的运行效率?
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的判断啊
作者:
刘芮铭
时间:
2012-8-24 20:34
很简单,你可以这样理解!
第一次:第一次判断s是否为null,是的话就进来同步代码块!不是的话进不去啦!
第二次:判断s是否为null,是的话就新建一个对象!
第三次:再判断s是否为null,因为上一步已经建立一个对象,所以不为null,所以来第一步都进不去!
综上所述:双重判断效率高
作者:
杨鹏鹏
时间:
2012-8-24 20:45
比如说,A线程进来
if(s==null)
A(停在这儿)
s=new Single();
}
B线程进来了。到对象锁哪儿进不来,A醒来,初始化,B判断第二个 if(s==null),b不再初始化,C线程进来判断第一个 if(s==null),以后进来的线程都不满足第一个 if(s==null),都不再判断锁,所以增加代码的运行效率
作者:
吴通
时间:
2012-8-24 20:51
虽然少了判断锁,但是在判断锁之前不是还得判断s是否为null,这样不是相当于少了一个判断又加了一个判断?
作者:
尤洋
时间:
2012-8-24 22:05
在这里影响效率的主要因素是对锁的判断,if else判断,对效率的影响比锁要小的多
通过外层if语句判断出是否能够 经过锁,
减少了锁的判断,也就提高了效率。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2