饿汉模式特点:见名知意,“他”很饿,迫切需要找到吃的... 所以 饿汉模式需要 第一时间 “找到吃的”(构建对象)。
如下代码:
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
安全性:在类加载时会将进行加载,等到调用时该类已经被处理好了所以能保证多线程调用下,调用的是同一个实例。
懒加载:如上所说,在类加载时就已经加载出来,所以不存在懒加载。
性能:性能不是很好,若长期不使用会占用内存空间,内存空间不足时容易造成内存溢出异常。