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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

public class Singleton2 {
   private Singleton2(){}
   private static Singleton2 instance;
   public synchronized static Singleton2 getlnstance(){
    init();
    if(instance==null){
     synchronized(Singleton2.class){
        if(instance==null)
            instance=new Singleton2();
     }
     return instance;
    }
    return instance;
   }
   private static void init(){}
}

4 个回复

倒序浏览
主要是为了优化 提高效率;如果不为空就根本没必要给对象钥匙
回复 使用道具 举报
小笨笨天 发表于 2015-11-17 19:58
主要是为了优化 提高效率;如果不为空就根本没必要给对象钥匙

谢谢,我的意思是为什么进行第二次if判断
回复 使用道具 举报
苹果核的梦想 发表于 2015-11-17 20:21
谢谢,我的意思是为什么进行第二次if判断

假设 类 Person   ,  Person p = new Person() ; Thread t1 = new Thread( p); Thread t2 = new Thread( p);这样两个线程指向同一个对象,A获取后 不判断  就给B  这样就违背了  单例
回复 使用道具 举报
小笨笨天 发表于 2015-11-17 20:37
假设 类 Person   ,  Person p = new Person() ; Thread t1 = new Thread( p); Thread t2 = new Thread(  ...

也就是A线程到达,判断为空new出了对象,但是还没执行完,CPU切换到第二个线程,第二个线程到来,发现为空又new了一个对象,是吗?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马