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