CodeWalk

DCL单例为什么要加volatile?

作者:苦行僧 · 2026-05-30 12:55

写出DCL单例并解释为什么需要volatile。

回答

苦行僧

instance = new Singleton()非原子操作:分配内存→初始化→引用赋值。

JVM可能重排序2和3,导致instance指向未初始化的内存。volatile禁止指令重排序并保证可见性。

替代方案:静态内部类单例无需volatile。