單例模式中的餓漢模式和懶漢模式【一看就懂】

以Java爲例:多線程

餓漢:函數

public final class VirtualCore {
private static VirtualCore gCore = new VirtualCore();

    private VirtualCore() {

    }
    public static VirtualCore get() {
        return gCore;
    }
}

懶漢:spa

public final class VirtualCore {
private static VirtualCore gCore = null;

    private VirtualCore() {

    }
    public static synchronized VirtualCore get() {
        if(gCore == null){
            gCore = new VirtualCore();
        }
        return gCore;
    }
}

先來看單例模式原理及要求,保證這個類在內存中只有一個對象,那麼就不能隨便給別人new,因此必須把構造函數改成private,而後整一個公共靜態方法供外部統一獲取實例。線程

 

再來看餓漢以及懶漢定義(原理)以及區別:code

餓漢:一開始就吧吃的找好(對象new出來),隨時能夠吃對象

懶漢:懶得動,餓了(有須要)再去找吃的(new 對象)blog

 

二者區別在於,餓漢模式拿空間換時間,一開始就把對象生成,在內存中佔着,懶漢則是按需生成。注意的是,多線程訪問的時候,內存

懶漢可能會由於不一樣步建立多個對象,因此獲取單例的方法加上 synchronized字段~get

相關文章
相關標籤/搜索