双重检查锁式单例模式的优点是什么?

双重检查锁(DCL)单例的优点

  1. 懒加载,节省内存

    只有第一次调用 getInstance() 时才创建对象,类加载时不会提前实例化;如果程序全程不用这个单例,就不会占用堆内存。饿汉式做不到这点。

  2. 线程安全

    通过 synchronized 同步锁保证多线程并发环境下只会创建一个实例,不会出现多个对象。

  3. 并发性能高

    外层第一层 if(instance == null) 做判断:

    实例已经创建后,后续所有线程直接跳过同步代码块,不用竞争锁,避免频繁加锁带来的性能损耗。

    如果直接给 getInstance() 方法加 synchronized,每次调用都要抢锁,效率很低。

  4. 延迟创建 + 线程安全兼顾

    普通懒汉式是懒加载但多线程不安全;DCL 同时解决了「延迟初始化」和「并发安全」两个需求。

  5. 使用简单,无需依赖内部类/枚举

    相比静态内部类、枚举单例,DCL 逻辑直观,适合需要理解锁、volatile 底层原理的业务场景。

简短总结(面试背诵版)

  • 懒加载,不浪费内存;
  • 多线程环境安全;
  • 已有实例时无需加锁,并发效率高;
  • 同时兼顾延迟初始化与线程安全。