總結一波單例設計模式的幾種寫法以及各自存在的優缺點。
1,餓漢式
顧名思義,例項物件早早的就建立出來了。這種方式在類載入的時候就完成了初始化,所以類載入過程比較緩慢,但是在使用過程中獲取例項物件的速度比較快,也因為這種方式是基於類載入機制的,所以避免了多執行緒的同步問題。
public class singleton
public static singleton getinstance()
}
優點:獲取物件的速度快;避免了多執行緒的同步問題
缺點:類載入過程慢
2,懶漢式(執行緒不安全)
顧名思義,例項物件建立時間較晚。例項物件在使用者第一次呼叫的時候初始化,雖然節約了資源,但是第一次載入時反應稍慢,而且在多執行緒的情況下不能正常使用。
public class singleton
public static singleton getinstance()
return instance;
}}
優點:節約資源
缺點:第一次載入時需要例項化,反應稍慢;多執行緒下不能正常工作
3,懶漢式(執行緒安全)
這種寫法時執行緒安全的,在多執行緒情況下是可以正常工作的,但是每次獲取例項物件的時候都需要進行同步,造成不必要的同步開銷。在移動應用開發端用到同步的情況很少,所以不建議使用。
public class singleton
public static synchronized singleton getinstance()
return instance;
}}
優點:在多執行緒下可以安全的使用
缺點:造成不必要的同步開銷
4,雙重檢查機制(dcl)
這種寫法有兩次判空。第一次判空是減少不必要的同步開銷,也是對上面寫法的改進;第二次判空是建立例項物件。注意這裡使用了volatile關鍵字
public class singleton
public static singleton getinstance() }}
return instance;
}}
優點:資源利用率高,執行緒安全
缺點:第一次載入時反應稍慢,在高併發環境下有缺陷
5,靜態內部類
這種單例模式在第一次類載入時並不會初始化,只有在第一次呼叫getinstance();時虛擬機器載入singletonholder並初始化singleton例項,也是執行緒安全的,也是推薦使用的。
public class singleton
public static singleton getinstance()
private static class singletonholder
}
優點:執行緒安全,節約資源
缺點:第一次載入時反應稍慢
單例模式幾種寫法
1.餓漢式 public class singleton public static singleton getinstance 2.懶漢式 public class singleton 雙層檢測鎖 public static singleton getinstance return instanc...
單例模式的幾種寫法
所謂單例模式就是確保某乙個類只有乙個例項,並且提供乙個全域性訪問點。例如 執行緒池 快取 對話方塊等等 1 餓漢模式 保證執行緒安全 public class singleton public static singleton getinstance 2 懶漢模式 不保證執行緒安全 public c...
單例模式的幾種寫法
1.懶漢式 public class singleinstance1 private static singleinstance1 instance public static singleinstance1 getinstance return instance 該程式缺點是執行緒不安全 publ...