单例模式 之 单例模式——饿汉模式

饿汉模式特点:见名知意,“他”很饿,迫切需要找到吃的... 所以 饿汉模式需要 第一时间 “找到吃的”(构建对象)。

如下代码:

 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

安全性:在类加载时会将进行加载,等到调用时该类已经被处理好了所以能保证多线程调用下,调用的是同一个实例。

懒加载:如上所说,在类加载时就已经加载出来,所以不存在懒加载。

性能:性能不是很好,若长期不使用会占用内存空间,内存空间不足时容易造成内存溢出异常。