天天看點

JAVA設計模式之懶漢式線程安全DCL雙重檢查鎖

public class dlcsingleton {

    private static volatile dlcsingleton minstance =null; //volatile關鍵字是為了禁止編譯器對 volatile關鍵字修飾的變量進行重排序,并保證volatile變量的讀操作發生在寫操作之後

    private dlcsingleton(){

    }

    public static dlcsingleton getminstance(){

        if(minstance == null){ //第一次檢查

            synchronized (dlcsingleton.class){ //同步代碼塊

                if(minstance == null){ //第二次檢查

                    minstance = new dlcsingleton();

                }

            }

        }

        return minstance;

}

dcl雙重檢查鎖僅在真正建立minstance執行個體的時候加上了synchronized關鍵字。。。而且使用volatile關鍵字修飾,是為了禁止編譯器對volatile變量重排序,并且保證volatile變量的讀操作發生在寫操作之後。