黑马程序员技术交流社区

标题: 单例设计中的懒汉延迟加载 为什么要用两个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