Java中的單例模式是一種設計模式,它確保一個類只有一個實例,并且提供全局訪問點。其中懶漢模式和餓漢模式是兩種常見的實現方式。
懶漢模式是指在第一次使用該類時才會實例化,而餓漢模式則是指在類加載時就已經實例化。
public class LazySingleton { private static LazySingleton instance; private LazySingleton() {} public static synchronized LazySingleton getInstance() { if(instance == null) { instance = new LazySingleton(); } return instance; } }
在懶漢模式中,需要加上synchronized關鍵字來保證線程安全,但是這也會導致性能下降。
public class EagerSingleton { private static EagerSingleton instance = new EagerSingleton(); private EagerSingleton() {} public static EagerSingleton getInstance() { return instance; } }
餓漢模式中的實例化是由JVM在類加載時進行的,因此不存在線程安全的問題,但是在應用程序啟動時就會創建該實例,如果該實例的構造非常耗時,那么應用程序的啟動時間也會非常長。
因此,在選擇懶漢模式和餓漢模式時,需要根據具體情況來選擇。如果應用程序啟動時間不是很關鍵,可以選擇餓漢模式,否則可以選擇懶漢模式。