黑马程序员技术交流社区

标题: 懒汉式为什么要进行2次if判断? [打印本页]

作者: 苹果核的梦想    时间: 2015-11-17 18:33
标题: 懒汉式为什么要进行2次if判断?
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(){}
}


作者: 小笨笨天    时间: 2015-11-17 19:58
主要是为了优化 提高效率;如果不为空就根本没必要给对象钥匙
作者: 苹果核的梦想    时间: 2015-11-17 20:21
小笨笨天 发表于 2015-11-17 19:58
主要是为了优化 提高效率;如果不为空就根本没必要给对象钥匙

谢谢,我的意思是为什么进行第二次if判断
作者: 小笨笨天    时间: 2015-11-17 20:37
苹果核的梦想 发表于 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 22:00
小笨笨天 发表于 2015-11-17 20:37
假设 类 Person   ,  Person p = new Person() ; Thread t1 = new Thread( p); Thread t2 = new Thread(  ...

也就是A线程到达,判断为空new出了对象,但是还没执行完,CPU切换到第二个线程,第二个线程到来,发现为空又new了一个对象,是吗?




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2