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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

class Single
{
        private static Single s = null;
        private Single(){}
        public static Single getInstance()
        {
                if(s==null)
                        s = new Single();
                return s;
        }
}

评分

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

查看全部评分

4 个回复

倒序浏览
你这个涉及到线程安全的问题,这个好像是单例设计模式。
private static Single s = null;这个设置成null是声明这么一个变量但是他不指向任何值。
  if(s==null)这里判断s==null是在多线程运行模式中,能够确保s是没有指向任何值的,是为了线程安全
然后才可以继续赋值: s = new Single();

评分

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

查看全部评分

回复 使用道具 举报
这是单例模式的通用代码啊,s设置为null和后来判断是否为null是为了保证在内存中只有一个实例
回复 使用道具 举报

懒汉式如果在创建实例对象时不加上synchronized则会导致对对象的访问不是线程安全的
对于所谓的懒汉式最好用双锁,不要把同步加在方法上,非常影响性能,因为单例方法往往会用得非常平凡,同步会带来很大的性能损耗。
private Singleton() {}

private static Singleton s = null;


public static Singleton getInstance() {
  synchronized(Singleton.class){
//线程的同步代码块(加的锁是Singleton类的字节码)
   if(s == null){
    s = new Singleton();
   }
   return s;
  }
}

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