餓漢式和懶漢式

2021-06-25 07:15:19 字數 1280 閱讀 7653

先回顧一下餓漢式單例的寫法:

//餓漢式

class single

public int getage()

//自定義構造方法

private single()

//自定義乙個物件

static single s=new single();

public static single getinstance()

}餓漢式:先初始化物件。

那麼,我們來看看懶漢式的實現方式

//懶漢式

class single

public int getage()

//自定義構造方法

private single()

//自定義乙個物件

static single s=null;

public static single getinstance()

return s;}}

看到紅色區域**的區別了麼?

懶漢式:物件是方法被呼叫時才初始化,也叫做物件的延遲載入。

在實際開發中一般用餓漢式,原因:

1.餓漢式**簡單方便,不存在其他如安全效能上的問題;

2.懶漢式可能出現安全和效能上的問題,如cpu切換出現的不必要錯誤。

那麼,如何優化懶漢式的實現方式呢。有兩種方法。

第一種是:

class single

public int getage()

//自定義構造方法

private single()

//自定義乙個物件

static single s=null;

public static synchronized single getinstance()

return s;

}}

紅色區域,表示同步,相當於「上鎖」,一次只能有乙個程式執行。可以避免cpu切換導致的程式錯誤。很遺憾,這樣做會降低執行效率。

第二種是:

class single

public int getage()

//自定義構造方法

private single()

//自定義乙個物件

static single s=null;

public static single getinstance()

} return s;

}}

這樣可以減少「解鎖」的次數,提高的效率,但是**還是沒有餓漢式簡單。

總結:定義單例,建議使用餓漢式。

懶漢式和餓漢式

餓漢式 public class hungrysingle 2.在類中建立乙個類的例項,私有化,靜態的 private static final hungrysingle hs new hungrysingle 3.通過公共方法呼叫,此公共方法只能類呼叫,因為設定了 static public st...

餓漢式懶漢式

這個是先初始化物件。稱為 餓漢式。single類一進記憶體,就已經建立好了物件。class single 私有化構造方法使得該類無法在外部通過new 進行例項化 public static single getinstance 物件是方法被呼叫時,才初始化,也叫做物件的延時載入。成為 懶漢式。sin...

設計模式 餓漢式 懶漢式

單例設計模式 確保乙個類中有且僅有乙個例項並為他提供乙個全域性訪問點。具體實現 1.將建構函式私有化。2.在類中建立乙個本類物件。3.提供乙個方法可以獲取到該物件。2.1餓漢式 single類一進記憶體,就已經建立好了物件。class single private static single s n...