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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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;
}
}
   

10 个回复

倒序浏览
每次都要判断锁很浪费资源的,所以在进入锁前先判断有没有对象了,如果有的话直接返回对象就行了。第二个if才是锁内来保证线程安全的
回复 使用道具 举报
如果不用两个判断   那么线程在执行getInstance方法的时候每次都要对锁进行判断  这样效率就低了
加了外面的判断之后,只要有对象存在就直接返回对象了 就不用去判断锁了 效率提高
判断锁也要占用资源的
回复 使用道具 举报
减少锁的判断次数。跟着毕老师的分析流程,自己画一下应该挺容易理解的!
回复 使用道具 举报
写得很好啊
回复 使用道具 举报
主要是减少了判断的次数
如果每次都判断的话会极大地影响性能
回复 使用道具 举报
楼上说的很好,第一个if是为了不判断锁二存在的,
回复 使用道具 举报
sam3say 中级黑马 2014-12-15 08:57:11
8#
经典的懒汉式,拜读
回复 使用道具 举报
两个判断是为了提高程序的执行效率效率
回复 使用道具 举报
还没学到这一步,我只是来学习的。
回复 使用道具 举报
外面的是提高效率,里面的是保证线程安全,s为空实例化对象,否则不
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马