單例模式復(fù)習(xí)

單例模式作為設(shè)計(jì)模式之一,有餓漢式單例,懶漢式單例,靜態(tài)內(nèi)部類(lèi)式單例,枚舉式,檢測(cè)雙重鎖單例
這里寫(xiě)的是雙重鎖單例

public class SingletionDCL{
    private volatile static SingletionDCL mInstance;
    private SingletionDCL(){}
    public static SingletionDCL getmInstance(){
        if (mInstance == null) {
            synchronize(SingletionDCL.class){
                if (mInstance == null) {
                    mInstance = new SingletionDCL();
                }
            }
        }
        return mInstance;
    }
}

如果不加volatile關(guān)鍵字會(huì)造成什么問(wèn)題

為什么要加volatile呢,因?yàn)樵?/p>

mInstance = new SingletionDCL();

這句話(huà)中,這段代碼是分三步進(jìn)行的
1.為mInstance申請(qǐng)內(nèi)存空間
2.初始化mInstance
3.講mInstance指向分配的內(nèi)存地址
JVM又有指令重排的特性,順序有可能就是1->3->2的順序,在單線(xiàn)程沒(méi)什么問(wèn)題,但是在多線(xiàn)程的話(huà),就會(huì)發(fā)生一個(gè)線(xiàn)程獲得還沒(méi)初始化的實(shí)例,比如線(xiàn)程A執(zhí)行了1,3步,這個(gè)時(shí)候線(xiàn)程B來(lái)執(zhí)行g(shù)etmInstance方法,就會(huì)獲得一個(gè)沒(méi)初始化的mInstance。而volitate關(guān)鍵字可以禁止jvm的指令重排,這樣子就可以保證在多線(xiàn)程環(huán)境下執(zhí)行。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 單例模式: 概念: 就是確保某個(gè)類(lèi)只有一個(gè)實(shí)例,并且只能自行實(shí)例化,向整個(gè)系統(tǒng)提供訪(fǎng)問(wèn)該唯一實(shí)例的方法。注意: ...
    scanf逗比a閱讀 90評(píng)論 0 0
  • 一、前言 單例模式是應(yīng)用最廣的設(shè)計(jì)模式之一,在使用這個(gè)模式時(shí),單例對(duì)象的類(lèi)必須保證只有一個(gè)實(shí)例存在,許多時(shí)候整個(gè)系...
    南小夕閱讀 272評(píng)論 0 1
  • 文章轉(zhuǎn)載自公眾號(hào)秉心說(shuō),作者 秉心說(shuō) 枚舉很適合用來(lái)實(shí)現(xiàn)單例模式。實(shí)際上,在 Effective Java 中也提...
    java經(jīng)驗(yàn)總結(jié)閱讀 286評(píng)論 0 2
  • 什么是設(shè)計(jì)模式? 是一套被反復(fù)使用、多數(shù)人知曉的、經(jīng)過(guò)分類(lèi)的、代碼設(shè)計(jì)經(jīng)驗(yàn)的總結(jié)。一些開(kāi)發(fā)的套路,用于解決某一些特...
    Spring618閱讀 708評(píng)論 0 0
  • 一直想整理一下關(guān)于andorid設(shè)計(jì)模式的文章,也方便自己需要的時(shí)候回顧下,由于有些地方也沒(méi)弄明白,所以有些地方可...
    BigBigArvin閱讀 597評(píng)論 1 5

友情鏈接更多精彩內(nèi)容