黑马程序员技术交流社区
标题:
单例设计中的懒汉延迟加载 为什么要用两个if语句判断
[打印本页]
作者:
I空空
时间:
2014-12-12 23:32
标题:
单例设计中的懒汉延迟加载 为什么要用两个if语句判断
class Single
{
private static Single s = null;
private Single(){}
public static Single getInstance()
{
if(s==null)//为什么还要加上这条if语句来判断,毕老师在视频里讲了,可我还不是很懂,还请各位大神通俗易懂的指点下
{
synchronized(Single.class)
{
if(s==null)
//--->A;
s = new Single();
}
}
return s;
}
}
作者:
冥夜
时间:
2014-12-13 10:54
每次都要判断锁很浪费资源的,所以在进入锁前先判断有没有对象了,如果有的话直接返回对象就行了。第二个if才是锁内来保证线程安全的
作者:
Quasimodo
时间:
2014-12-13 10:56
如果不用两个判断 那么线程在执行getInstance方法的时候每次都要对锁进行判断 这样效率就低了
加了外面的判断之后,只要有对象存在就直接返回对象了 就不用去判断锁了 效率提高
判断锁也要占用资源的
作者:
huoxy
时间:
2014-12-13 11:01
减少锁的判断次数。跟着毕老师的分析流程,自己画一下应该挺容易理解的!
作者:
chen578157939
时间:
2014-12-14 22:09
写得很好啊
作者:
提米特
时间:
2014-12-14 22:12
主要是减少了判断的次数
如果每次都判断的话会极大地影响性能
作者:
chen578157939
时间:
2014-12-14 22:14
楼上说的很好,第一个if是为了不判断锁二存在的,
作者:
sam3say
时间:
2014-12-15 08:57
经典的懒汉式,拜读
作者:
菜鸟一号
时间:
2014-12-15 09:07
两个判断是为了提高程序的执行效率效率
作者:
Elvismao
时间:
2014-12-15 09:43
还没学到这一步,我只是来学习的。
作者:
run_wind
时间:
2014-12-15 10:57
外面的是提高效率,里面的是保证线程安全,s为空实例化对象,否则不
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2