Java單例模式是一種創建型設計模式,它確保一個類只有一個實例,并提供一個全局訪問點。在Java中,單例模式的實現有多種方法,每種方法都有其優缺點。以下是一些常見的實現方式及其內存管理特點:
public class Singleton {
private static final Singleton INSTANCE = new Singleton();
private Singleton() {}
public static Singleton getInstance() {
return INSTANCE;
}
}
public class Singleton {
private static Singleton instance;
private Singleton() {}
public static Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
getInstance()
方法時創建,節省了啟動時間,但存在線程安全問題。如果多個線程同時訪問,可能會創建多個實例。public class Singleton {
private static volatile Singleton instance;
private Singleton() {}
public static Singleton getInstance() {
if (instance == null) {
synchronized (Singleton.class) {
if (instance == null) {
instance = new Singleton();
}
}
}
return instance;
}
}
getInstance()
方法時創建,節省了啟動時間。public enum Singleton {
INSTANCE;
// 其他方法
public void someMethod() {
// 方法實現
}
}
public class Singleton {
private Singleton() {}
private static class SingletonHolder {
private static final Singleton INSTANCE = new Singleton();
}
public static Singleton getInstance() {
return SingletonHolder.INSTANCE;
}
}
getInstance()
方法時創建,節省了啟動時間。由于使用了靜態內部類,只有在需要時才加載SingletonHolder
類,因此實現了延遲加載。選擇哪種實現方式取決于具體的應用場景和需求。