相信面向?qū)ο蟪绦騿T都對(duì)單例模式比較熟悉,而對(duì)于單例模式卻有著各種各樣的寫法,今天我專門針對(duì)一種稱為雙重加鎖的寫法進(jìn)行分析。我們先來(lái)看下這種寫法。
/** * 單例雙重加鎖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; } }
這種寫法相信很多人都見過,但是你認(rèn)為這種寫法是正確的嗎?或者更準(zhǔn)確的來(lái)說,這種寫法在并發(fā)的環(huán)境下是否還能表現(xiàn)出正確的行為呢。
之所以有這種所謂的雙重加鎖,一方面是因?yàn)檠舆t初始化可以提高性能,另一方面通過使用內(nèi)置鎖sychronized來(lái)防止并發(fā),其原