餓漢模式特點:見名知意,“他”很餓,迫切需要找到吃的... 所以 餓漢模式需要 第一時間 “找到吃的”(構建對象)。
如下代碼:
1 /** 2 * 餓漢模式 3 */ 4 public class HungrySingleton { 5 private static HungrySingleton instance=new HungrySingleton(); 6 7 /** 8 * 禁止外部構建 9 */ 10 private HungrySingleton(){} 11 12 /** 13 * 由外部調用 14 * @return 15 */ 16 public static HungrySingleton getInstance(){ 17 return instance; 18 } 19 20 /** 21 * 測試 22 * @param args 23 */ 24 public static void main(String[] args) { 25 for(int i=0;i<20;i++){ 26 new Thread(()->{ 27 System.out.println(HungrySingleton.getInstance()); 28 }).start(); 29 } 30 } 31 32 }
測試結果:運行二十線程,運行的結果為同一個用例。
2 com.company.HungrySingleton@19281561 3 com.company.HungrySingleton@19281561 4 com.company.HungrySingleton@19281561 5 com.company.HungrySingleton@19281561 6 com.company.HungrySingleton@19281561 7 com.company.HungrySingleton@19281561 8 com.company.HungrySingleton@19281561 9 com.company.HungrySingleton@19281561 10 com.company.HungrySingleton@19281561 11 com.company.HungrySingleton@19281561 12 com.company.HungrySingleton@19281561 13 com.company.HungrySingleton@19281561 14 com.company.HungrySingleton@19281561 15 com.company.HungrySingleton@19281561 16 com.company.HungrySingleton@19281561 17 com.company.HungrySingleton@19281561 18 com.company.HungrySingleton@19281561 19 com.company.HungrySingleton@19281561 20 com.company.HungrySingleton@19281561 21 com.company.HungrySingleton@19281561 22 23 Process finished with exit code 0
安全性:在類加載時會將進行加載,等到調用時該類已經被處理好了所以能保證多線程調用下,調用的是同一個實例。
懶加載:如上所說,在類加載時就已經加載出來,所以不存在懶加載。
性能:性能不是很好,若長期不使用會占用內存空間,內存空間不足時容易造成內存溢出異常。