java單例模式中餓漢式與懶漢式區別
阿新 • • 發佈:2019-01-27
餓漢式:
設計思想:構造方法私有,這樣就保證了在外部是無法例項化物件的;然後先在內部定義一個靜態常量物件,再寫一個static方法來返回這個物件,這樣就保證是一個物件了。
【程式碼實現】
public class HungryManSingleton { /** * 構造方法私有 */ private HungryManSingleton() { // TODO Auto-generated constructor stub } /** *餓漢式單例實現 */ private static final HungryManSingleton hungryMan = new HungryManSingleton(); /** * 獲取例項 */ public static HungryManSingleton getInstance() { return hungryMan; } }
懶漢式:
【程式碼實現】
區別 :餓漢式是先定義例項的 而懶漢式是先定義引用,當懶漢式第一次呼叫getInstance的時候 進行物件例項化操作;當然這裡考慮到多併發的情況,多個執行緒同時呼叫這個方法的時候,會出現問題,所以加上同步鎖 synchronized 來保證同一時刻只有一個執行緒進入方法。public class LazySingleton { private LazySingleton() { // TODO Auto-generated constructor stub } private static LazySingleton lazySingleton; public synchronized static LazySingleton getInstance() { if (lazySingleton == null) { System.out.println("第一次呼叫的例項化。"); lazySingleton = new LazySingleton(); } return lazySingleton; } }