java double check of volatile

A a = new A();
上述可拆分为三个步骤:
    -1、分配地址
    -2、初始化对象
    -3、将 变量a 指向这个地址

在准时制生产方式(Just In Time简称JIT)时,可能发生指令重排;

在单线程时,就算发生了重排,也不会有问题,在多线程时,2、3步骤发生改变,
线程一,执行了1,3,2的顺序,当赋值操作执行后,线程二刚好 判断不为null直接返回,但其实,对象还没有初始化完成。机会发生错误

volatile and may wish to ensure visibility native instruction rearrangement, but does not guarantee the atomicity of data,

volatile interpretation
https://www.cnblogs.com/Mainz/p/3556430.html#

Guess you like

Origin www.cnblogs.com/guyuedashu/p/12093061.html