設計模式-單例模式

單例模式(Single),顧名思義阿。就是這個類的實例(也就是對象),有且只有一個java

這樣就能夠達到複用的結構,也無需浪費jvm的內存空間。併發

單例模式呢,又分兩種.一種是餓漢式加載,另外一種是懶漢式加載。jvm

先上餓漢式加載吧ui

/**
 * 餓漢式加載
 */
public class Quick {
    private static Quick quick = new Quick();
    
    public static Quick getInstance(){
        return quick;
    }
}

下面是懶漢式線程

/**
 * 懶漢式加載
 */
public class Lazy {
    private static Lazy lazy;

    public static Lazy getInstance() {
        if (lazy != null) {//當已經建立過實例了,直接返回
            return lazy;
        } else {
            synchronized (lazy) {
                if (lazy != null) {
                    return lazy;
                } else {
                    lazy = new Lazy();
                    return lazy;
                }
            }
        }

    }
}

相信你們這裏看到了代碼塊,爲何這麼個寫法呢code

1.若是是同步方法的話,那效率很是低.特別是當實例已經建立的狀況下(已經不能併發獲取了)對象

2.同步代碼塊裏面爲啥還要再加個判斷呢,這是由於併發的狀況下.在實例化的過程當中有多個線程調用了此方法內存

而同步的調用代碼塊,因此這裏須要再加一層判斷get

相關文章
相關標籤/搜索