1. 程式人生 > 其它 >單例模式-DCL

單例模式-DCL

鐵子們有段時間沒有更新了,最近忙著準備面試,準備過程中發現自己還需要積累的實在是太多太多,每每學到新東西的感覺真是美妙而又動力十足啊,繼續伸直腰桿、努力前進

單例模式-DCL

雙重檢查判斷,使用volatile關鍵字禁止指令重排,在多執行緒情況下建立安全的單例物件,直接上程式碼

public class Instance {

    /**
     * volatile 禁止指令重排,按照程式碼執行順序先賦值後建立物件
     */
    private volatile static Instance instance;

    private String instName;

    private Instance() {
        instName = "DCL";
    }

    public static Instance getInstance() {
        if (instance == null) {
            synchronized (Instance.class) {
                if (instance == null) {
                    instance = new Instance();
                }
            }
        }
        return instance;
    }
}

單例模式-內部類

使用內部類構造單例物件,JVM保證單例

public class Instance {

    private static class InstanceObj {
        private static final Instance INSTANCE = new Instance();
    }

    public static Instance getInstance() {
        return InstanceObj.INSTANCE;
    }
}