饿汉式单例在类加载时即创建实例,天然线程安全且无需同步,但不支持延迟加载、可能造成资源浪费;核心是private static final实例+私有构造+public static getinstance()方法。

饿汉式单例在 Java 中通过类加载时就创建实例来实现,天然线程安全,无需同步,但可能造成资源浪费。
核心实现方式
使用 private static final 修饰的成员变量,在声明时直接初始化实例,并将构造方法设为 private,防止外部 new 创建对象。
- 类加载阶段(静态变量初始化)即完成实例创建,JVM 保证该过程线程安全
- 提供 public static 方法(如 getInstance())返回唯一实例
- 不依赖任何锁或双重检查,简洁高效
标准代码示例
public class Singleton {
private static final Singleton instance = new Singleton();
private Singleton() {}
public static Singleton getInstance() {
return instance;
}
}
注意:构造方法必须私有;instance 必须是 static final;getInstance 方法不可被重写(可加 final 修饰)。
适用场景与注意事项
适合实例创建开销小、且一定会被使用的场景。若单例对象初始化耗时长或占用大量资源,而程序中又很少用到它,就会造成“过早加载”和资源闲置。
- 无法实现延迟加载(Lazy Loading),实例在类首次被主动引用时即创建
- 反射攻击仍可绕过私有构造(可通过在构造器中加判断规避)
- 序列化可能导致破坏单例,需实现 readResolve() 方法
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











