java設計模式單例模式 ----懶漢式與餓漢式的區別
常用的五種單例模式實現方式
——主要:
1.餓漢式(線程安全,調用率高,但是,不能延遲加載。)
2.懶漢式(線程安全,調用效率不高,可以延時加載。)
——其他:
1.雙重檢測鎖式(由於JVM底層內部模型原因,偶爾會出問題,不建議使用)
2.靜態內部類式(線程安全,調用效率高。但是,可以延時加載)
3.枚舉式(線程安全,調用率高,不能延時加載)
如何選用?
——單例對象 占用資源少,不需要 延時加載
枚舉式 好於 餓漢式
——單例對象 占用資源大,需要延時加載
靜態內部類式 好於 懶漢式
下面介紹一下 java設計模式單例模式中懶漢式與餓漢式的區別
餓漢式:
public class Singleton{
private static Singleton singleton = new Singleton ();
private Singleton (){}
public static Singleton getInstance(){return singletion;}
}
懶漢式:
public class Singleton{
private static Singleton singleton = null;
public static synchronized synchronized getInstance(){
if(singleton==null){
singleton = new Singleton();
}
return singleton;
}
}
比較:
餓漢式是線程安全的,在類創建的同時就已經創建好一個靜態的對象供系統使用,以后不在改變
懶漢式如果在創建實例對象時不加上synchronized則會導致對對象的訪問不是線程安全的
推薦使用第一種
他是在需要的時候才創建對象,而餓漢式在虛擬機啟動的時候就會創建,
懶漢式的優點是延時加載、缺點是應該用同步(想改進的話現在還是不可能,比如double-check)、其實也可以不用同步、看你的需求了,多創建一兩個無引用的廢對象其實也沒什么大不了。
