1. 单例模式的核心概念
单例模式是一种创建型设计模式,它确保一个类只有一个实例,并提供一个全局访问点。这个模式在需要控制资源访问或限制实例数量的场景中特别有用。
单例模式的核心在于:
- 私有化构造函数,防止外部直接实例化
- 提供一个静态方法获取唯一实例
- 确保线程安全(在多线程环境下)
java复制public class Singleton {
private static Singleton instance;
private Singleton() {} // 私有构造函数
public static Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 单例模式的实现方式
2.1 饿汉式单例
饿汉式在类加载时就创建实例,保证了线程安全,但可能造成资源浪费。
java复制public class EagerSingleton {
private static final EagerSingleton instance = new EagerSingleton();
private EagerSingleton() {}
public static EagerSingleton getInstance() {
return instance;
}
}
2.2 懒汉式单例(非线程安全)
懒汉式在第一次调用时才创建实例,但基础实现不是线程安全的。
java复制public class LazySingleton {
private static LazySingleton instance;
private LazySingleton() {}
public static LazySingleton getInstance() {
if (instance == null) {
instance = new LazySingleton();
}
return instance;
}
}
2.3 线程安全的懒汉式
通过同步方法确保线程安全,但会影响性能。
java复制public class ThreadSafeSingleton {
private static ThreadSafeSingleton instance;
private ThreadSafeSingleton() {}
public static synchronized ThreadSafeSingleton getInstance() {
if (instance == null) {
instance = new ThreadSafeSingleton();
}
return instance;
}
}
2.4 双重检查锁定
更高效的线程安全实现,减少同步开销。
java复制public class DoubleCheckedSingleton {
private volatile static DoubleCheckedSingleton instance;
private DoubleCheckedSingleton() {}
public static DoubleCheckedSingleton getInstance() {
if (instance == null) {
synchronized (DoubleCheckedSingleton.class) {
if (instance == null) {
instance = new DoubleCheckedSingleton();
}
}
}
return instance;
}
}
2.5 静态内部类实现
利用类加载机制保证线程安全,同时实现懒加载。
java复制public class InnerClassSingleton {
private InnerClassSingleton() {}
private static class SingletonHolder {
private static final InnerClassSingleton INSTANCE = new InnerClassSingleton();
}
public static InnerClassSingleton getInstance() {
return SingletonHolder.INSTANCE;
}
}
