Java 饿汉式 单例模式

张开发
2026/5/16 13:40:12 15 分钟阅读

分享文章

Java 饿汉式 单例模式
Java 饿汉式 单例模式饿汉式Eager Initialization是 Java 单例模式中最简单、最基础的一种实现方式。它的核心思想非常形象就像一个“饿汉”一样迫不及待地在类加载时就提前把唯一的实例对象创建好不管后续有没有用到都先把“粮食”囤好。以下是饿汉式单例模式的代码实现、核心原理以及优缺点分析 代码实现publicclassHungrySingleton{// 1. 在类加载时直接创建唯一的静态实例饿汉式核心privatestaticfinalHungrySingletonINSTANCEnewHungrySingleton();// 2. 私有化构造方法禁止外部通过 new 关键字创建对象privateHungrySingleton(){}// 3. 提供全局公共的静态方法供外部获取唯一的实例publicstaticHungrySingletongetInstance(){returnINSTANCE;}} 核心原理饿汉式单例模式之所以能实现线程安全主要依赖于JVM 的类加载机制。在 Java 中类的加载过程是线程安全的由 JVM 保证一个类只会被加载一次。饿汉式将实例的创建放在了静态变量初始化阶段这意味着当类被加载时实例就已经被创建好了。因此它天然地避免了多线程并发创建多个实例的问题不需要额外加锁。✅ 优点实现简单代码非常简洁明了易于理解和维护。绝对线程安全利用 JVM 类加载机制保证实例的唯一性没有任何并发风险。获取效率高因为实例在类加载时就已经创建完毕后续调用getInstance()方法时直接返回即可没有同步锁的开销性能极高。❌ 缺点可能造成内存浪费由于实例在类加载时就被创建如果这个单例类在整个程序运行期间从未被使用过那么这个提前创建好的实例就会一直占用内存造成资源闲置。延长启动时间如果单例对象的初始化过程非常耗时例如需要加载大量配置文件或建立复杂的数据库连接会导致应用程序的启动速度变慢。 适用场景饿汉式非常适合实例创建开销较小、且程序运行期间一定会被使用的场景例如简单的全局配置管理器轻量级的日志工具类一定会用到的常量池或缓存管理器如果你需要实现“用到时才创建”即延迟加载/懒加载的单例模式可以考虑使用双重检查锁DCL或静态内部类的方式。要不要看看饿汉式和懒加载双重检查锁在代码和性能上的具体对比

更多文章