吊打Java面试官-Java单例模式实现DCL双重检验锁为什么一定要加volatile



对于 T t = new T();
其实有如下字节码指令完成

_new 'org/openjdk/jol/T'
dup
INVOKESPECIAL org/openjdk/jol/T.<init> ()V
astore 1
return

线程一 new 到一半时,m=0,发生重排序
这时线程 2 来了!看到 t 已经指向了一个半初始化的实例了!

这个概率很小,但是并发如淘宝,都是可能发生的!所以必须要加!

发布了423 篇原创文章 · 获赞 1097 · 访问量 55万+

猜你喜欢

转载自blog.csdn.net/qq_33589510/article/details/105319129