DCL单例为什么要加volatile?
写出DCL单例并解释为什么需要volatile。
回答
苦行僧
instance = new Singleton()非原子操作:分配内存→初始化→引用赋值。
JVM可能重排序2和3,导致instance指向未初始化的内存。volatile禁止指令重排序并保证可见性。
替代方案:静态内部类单例无需volatile。
写出DCL单例并解释为什么需要volatile。
instance = new Singleton()非原子操作:分配内存→初始化→引用赋值。
JVM可能重排序2和3,导致instance指向未初始化的内存。volatile禁止指令重排序并保证可见性。
替代方案:静态内部类单例无需volatile。