懶漢式和餓漢式的比較

一、懶漢式(Lazy Initialization)

懶漢式是指在需要調用時才去創建單例對象,而不是在程序運行時就創建好,以達到延遲加載的效果。

1、優點

懶漢式可以避免在程序啟動時就創建單例對象,從而降低系統的開銷。如果單例對象很大或者需要一定時間才能創建,那麼懶漢式會比較有優勢。

2、缺點

懶漢式也有一些缺點。首先,多線程環境下,需要使用同步鎖來保證線程安全,這會導致性能下降。其次,如果有多個類加載器,那麼會存在不同類加載器加載了不同的單例對象的情況。

3、代碼實現

public class LazySingleton {

	private static LazySingleton instance;

	private LazySingleton() {}

	public static synchronized LazySingleton getInstance() {
		if (instance == null) {
			instance = new LazySingleton();
		}
		return instance;
	}
}

二、餓漢式(Eager Initialization)

餓漢式是指在程序運行時就創建好單例對象,並且在整個程序周期內都會存在。

1、優點

餓漢式可以避免多線程環境下的同步問題,因為單例對象在程序運行時就已經創建好了。同時在單例對象很小且不需要延遲加載的情況下,使用餓漢式也比較合適。

2、缺點

餓漢式也有一些缺點。首先,如果單例對象比較大,那麼在程序啟動時就會佔用較多的內存空間。其次,如果單例對象的初始化需要很長的時間,那麼程序啟動時的等待時間會變長。

3、代碼實現

public class EagerSingleton {

	private static final EagerSingleton instance = new EagerSingleton();

	private EagerSingleton() {}

	public static EagerSingleton getInstance() {
		return instance;
	}
}

三、懶漢式與餓漢式的比較

1、線程安全

懶漢式需要使用同步鎖來保證線程安全,而餓漢式本身就是線程安全的。

2、是否延遲加載

懶漢式是延遲加載的,而餓漢式是立即加載的。

3、系統開銷

懶漢式可以避免在程序啟動時就創建單例對象,從而降低系統的開銷。而餓漢式會在程序啟動時就創建單例對象,如果單例對象很大或需要一定時間才能創建,那麼會造成一定的系統開銷。

4、不同類加載器加載的問題

如果有多個類加載器,那麼懶漢式會存在不同類加載器加載了不同的單例對象的情況。而餓漢式不存在這個問題。

原創文章,作者:CPNGR,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/367936.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
CPNGR的頭像CPNGR
上一篇 2025-04-02 01:28
下一篇 2025-04-02 01:28

相關推薦

  • 懶漢式單例模式:從多個方面深入闡述

    在面向對象編程中,單例指的是一個類只允許創建一個實例,並且提供一個全局訪問的接口。單例模式主要解決的問題是在多線程環境下,如何保證一個類只有一個實例,並且能夠在全局範圍內訪問該實例…

    編程 2025-04-24

發表回復

登錄後才能評論