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

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 个回复

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