对于 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 已经指向了一个半初始化的实例了!
这个概率很小,但是并发如淘宝,都是可能发生的!所以必须要加!
对于 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 已经指向了一个半初始化的实例了!
这个概率很小,但是并发如淘宝,都是可能发生的!所以必须要加!