懶漢式與餓漢式單例類的區別主要體現在實例化時機、線程安全性和資源利用效率上。以下是詳細介紹:
getInstance()
方法時才進行實例化,實現了延遲加載,可以有效減少資源浪費。getInstance()
方法上加synchronized
關鍵字或使用雙重檢查鎖定(Double-Checked Locking)來確保線程安全。public class HungryStyle {
private static final HungryStyle instance = new HungryStyle();
private HungryStyle() {}
public static HungryStyle getInstance() {
return instance;
}
}
public class LazyStyle {
private static LazyStyle instance;
private LazyStyle() {}
public static synchronized LazyStyle getInstance() {
if (instance == null) {
instance = new LazyStyle();
}
return instance;
}
}
綜上所述,懶漢式單例類在實例化時機、線程安全性和資源利用效率方面與餓漢式單例類有所不同。懶漢式單例類通過延遲加載實例化對象,提高了資源利用效率,但需要注意線程安全問題。餓漢式單例類則在實例化時就已經完成了對象的創建,線程安全,但可能會造成一定的資源浪費。