相信面向对象程序员都对单例模式比较熟悉,而对于单例模式却有着各种各样的写法,今天我专门针对一种称为双重加锁的写法进行分析。我们先来看下这种写法。

平面设计培训,网页设计培训,美工培训,游戏开发,动画培训

/**
 * 单例双重加锁Demo
 * */public class DoubleCheckLock {   
    private static DoubleCheckLock instance ;    
    private DoubleCheckLock(){
        
    }    
    public static DoubleCheckLock getInstance(){        if(instance == null){            synchronized (DoubleCheckLock.class) {                if(instance == null)
                    instance = new DoubleCheckLock() ;
            }
        }        return instance;
    }
}

平面设计培训,网页设计培训,美工培训,游戏开发,动画培训

  这种写法相信很多人都见过,但是你认为这种写法是正确的吗?或者更准确的来说,这种写法在并发的环境下是否还能表现出正确的行为呢。

  之所以有这种所谓的双重加锁,一方面是因为延迟初始化可以提高性能,另一方面通过使用内置锁sychronized来防止并发,其原