1. 双重检查锁定(Double-Checked Locking)在 Java 5+ 的 volatile 正确实现,与静态内部类懒加载的取舍
双重检查锁定(Double-Checked Locking)在 Java 5+ 的 volatile 正确实现是什么?与静态内部类懒加载的取舍是什么?
- DCL volatile 实现
- 静态内部类懒加载
- 取舍
DCL 正确实现:单例字段 volatile,第一次无锁检查,加锁后第二次检查,构造后 volatile 安全发布(防半初始化)。静态内部类懒加载:利用 JVM 类加载机制,静态内部类(Holder)在首次访问时才加载初始化单例,天然线程安全、无 DCL 复杂度。取舍:DCL 需 volatile 与细心,但可延迟初始化且性能好;静态内部类更简单、无锁、懒加载,是推荐方式。DCL 适合需要手动控制或已用 volatile 的场景,静态内部类更简洁。
DCL 用 volatile 保安全,静态内部类靠类加载机制保安全。静态内部类更推荐(简单无锁)。