餓漢模式與懶漢模式比較及優化

2021-08-22 04:44:26 字數 1394 閱讀 6087

餓漢模式與懶漢模式常見於單例模式中,二者初始化時機,執行緒安全等均不一樣,詳細分析如下:

1、餓漢模式:

從名字去理解,它很餓,所以在載入類的時候,就進行初始化了。

//餓漢模式

public class singleton

//獲取例項方法

public static singleton getinstance()

}

也可以通過靜態**塊實現,效果一致

//餓漢模式

public class singleton

//構造器

private singleton(){}

//獲取例項方法

public static singleton getinstance()

}

分析:在類載入時就完成了初始化,所以類載入比較慢,但獲取物件的速度快,執行緒安全。

2、懶漢模式:

顧名思義,比較懶,在你需要它的時候,才會進行初始化,而且還要判空。同時它是執行緒不安全的,多執行緒呼叫它會出問題。

//懶漢模式

public class singleton

//獲取例項方法

public static singleton getinstance()

return singleton;

}}

可以通過加鎖來控制線程安全

//懶漢模式

public class singleton

//獲取例項方法

public static synchronized singleton getinstance()

return singleton;

}}

這種寫法在getinstance()方法中加入了synchronized鎖。能夠在多執行緒中很好的工作,而且看起來它也具備很好的lazy loading,但是效率很低。

3、優化:

如果例項化singleton很消耗資源,我想讓他延遲載入,可又擔心執行緒安全問題,可以使用如下方式:

public class singleton 

//構造器

private singleton(){}

//獲取例項方法

public static synchronized singleton getinstance()

}

singleton類被裝載了,singleton不一定被初始化。因為singletonhandler類沒有被主動使用,只有顯示通過呼叫getinstance方法時,才會顯示裝載singletonhandler類,從而例項化singleton。

4、比較:

餓漢模式載入慢執行快,安全性高。懶漢模式載入快執行慢,有執行緒安全問題,增加鎖,又影響效率。

懶漢模式與餓漢模式

懶漢模式 加截類的時候就建立物件 class single private static single s new single pubic static single getinstance 餓漢模式 呼叫getinstance 方法時才建立物件 class single private stat...

餓漢模式和懶漢模式

package pattern.singleton 餓漢式單例類.在類初始化時,已經自行例項化 public class singleton1 已經自行例項化 private static final singleton1 single new singleton1 靜態工廠方法 public st...

餓漢模式vs懶漢模式

餓漢式 建立物件例項的時候直接初始化 空間換時間 public class singletonone 2 建立該型別的私有靜態例項 private static singletonone instance newsingletonone 3 建立公有靜態方法返回靜態例項物件 public stati...