相信面向对象程序员都对单例模式比较熟悉,而对于单例模式却有着各种各样的写法,今天我专门针对一种称为双重加锁的写法进行分析。我们先来看下这种写法。
/**
* 单例双重加锁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来防止并发,其原

