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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 陈苓 中级黑马   /  2012-4-11 01:08  /  1616 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class Single{
  private static final s = null;
  private Single(){}
  public static void  getInstance(){
          if(s==null)  //这里要多加一次判断,这里的判断目的也有点模糊         synchronized(Slingle.class)
             if(s==null)//这里判断的时候,如果有多条线程,一线程进来出去之后其他的的线程进进步来,怎么有点模糊         {
        
                   s = new Single();
         }
             return s;

          }
   }

该贴已经同步到 格式化的微博

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

2 个回复

倒序浏览
class Single{
  private static final s = null;
  private Single(){}
  public static void  getInstance(){
          if(s==null)  //这里要多加一次判断,这里的判断目的也有点模糊      
  synchronized(Slingle.class)
             if(s==null)//这里判断的时候,如果有多条线程,一线程进来出去之后其他的的线程进进步来,怎么有点模糊         {
        
                   s = new Single();
         }
             return s;

          }
   }

上面没有换行,不好看
回复 使用道具 举报
class Single{
   private static final s = null;
   private Single(){}
   public static void  getInstance(){
           if(s==null)  //这里要多加一次判断,这里的判断目的判断进来的线程是否为空   
  synchronized(Slingle.class)
              if(s==null)//这里判断的时候,如果有多条线程,一线程进来出去之后其他的的线程如果想进来得先判断锁      
{
                   A------>
                    s = new Single();
          }
              return s;

          }
    }
这样双重判断,首先如果一个线程A进来了,判断为空,那么进来判断也满足条件 A线程如图 ,,这时又进来一个B线程进来,判断s==null,所以 进来,因为有锁,进不去,然后线程A new了一个对象然后出去了,这时线程B 进去了,再次判断s==null,不满足条件,因此进不去。此时如果在来一个C线程先判断第一个s==null,就不满足条件,所以不用判断锁。减少了判断锁的次数,提高了懒汉式的效率。

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马