Java中的單例模式是面向對象編程中常用的一種模式,它主要用于保證在系統中只能存在一個實例對象。
在單例模式中,餓漢單例和懶漢單例是兩種常見的實現方式。
public class Singleton { // 餓漢單例模式,在類初始化時就完成了實例化,線程安全 private static final Singleton instance = new Singleton(); private Singleton() {} public static Singleton getInstance() { return instance; } }
上述代碼中,私有構造函數保證了外部無法通過類的構造函數創建實例對象。在類首次加載時,靜態變量instance就被初始化,所以在多線程環境下也不會導致線程安全問題。
public class Singleton { // 懶漢單例模式,使用時才進行實例化,不過線程不安全 private static Singleton instance; private Singleton() {} public static Singleton getInstance() { if (instance == null) { instance = new Singleton(); } return instance; } }
懶漢單例相比于餓漢單例,會延遲實例化,只有在使用時才會進行初始化,可能會避免不必要的資源占用。但是,在多線程環境中,如果同時有多個線程執行到if (instance == null)這一判斷語句時,有多個線程都會創建實例對象,從而導致線程不安全問題。
綜上所述,餓漢單例和懶漢單例各有優缺點,在實際開發中需要根據實際情況進行選擇。如果實例對象占用資源比較大,且在系統啟動時就需要使用,那么推薦使用餓漢單例模式,否則可以使用懶漢單例模式,但需要進行線程安全的處理。
下一篇div 預覽網頁