單例模式實現的3種方式,推薦

2021-08-21 15:26:54 字數 1483 閱讀 9187

以下為單例模式實現的3種常用方式。

(1)餓漢模式 

public class hungry //單例模式都要注意隱藏構造器

private static hungry singleton = new hungry();

public static hungry getsingleton()

/*測試*/

public static void main(string args)

}).start();}}

}

執行結果:

com.bee.sample.ch1.practice.hungry@64669643

com.bee.sample.ch1.practice.hungry@64669643

com.bee.sample.ch1.practice.hungry@64669643

... ...(忽略幾行)

【點評】是執行緒安全的,但是系統啟動,在類載入時,會直接new出乙個物件,導致系統啟動變慢。

(2)懶漢模式

public class syndoublechecklazy 

private static syndoublechecklazy singleton=null;

public static syndoublechecklazy getsingleton()catch (exception e)

synchronized (syndoublechecklazy.class)}}

return singleton;

}/*以下為測試*/

public static void main(string args)

}).start();}}

}

【點評】執行緒安全,且效率優良,值得推薦。兩次判斷getsingleton 返回物件是否為空,第一次是效率需要,如果非空,直接返回,不用進入下面的同步模組損失效率,第二次是安全需要。

(3)私有靜態內部類模式

package com.bee.sample.ch1.practice;

public class privatestaticinner

private static class privatestaticinnerholder

public static privatestaticinner getsingleton()

/*測試*/

public static void main(string args)

}).start();}}

}

【點評】執行緒安全,外貌和餓漢模式相似,兩者都是利用類載入的方式來實現初始化時只有乙個執行緒,區別在於privatestaticinner 載入時,不會立刻例項化,而是呼叫getsingelton方法時,才會裝載內部類privatestaticinnerholder,從而完成父類privatestaticinner 的例項化,值得推薦。

7種方式實現單例模式

單例模式,即是整個類有且只有乙個類例項,通過這個唯一的例項為全域性提供服務。單例類的構造方法為私有的,通過乙個暴露給外界的獲取例項方法來呼叫私有構造方法,保證例項的唯一性。因為餓漢式單例在類載入時就初始化了唯一的例項 且只會初始化一次,所以,該例項是唯一的,即 執行緒安全的 因此,如果我們想要為例項...

單例模式(5種實現方式)

1.餓漢式 不支援併發 此模式只能執行在單執行緒下,且類在載入時就已經建立好了例項,不管需不需要用。package com.lys 餓漢式 public class singleton1 private static singleton1 instance new singleton1 public...

5種方式實現單例模式

破壞單例模式的方法及應對 使用場景 單例模式的核心是乙個類只允許有乙個例項化物件。spring物件池預設就是單例模式。如果生產環境下某類只需要也只允許有乙個例項化物件就可以考慮使用單例模式。實現單例模式的策略是 構造方法私有化,也就是外部不允許通過new的方式獲取物件,而是提供乙個公開的靜態方法供外...