Java内存指令重排序 和 volatile
1.指令重排发生原因?
这个的重类加载说起,一个被类加载到类加载器中,首先会进行检查校验,这里涉及到的 双亲委派机制,等等,发生内存重排序 ,实在类初始化的时候,例如 类A.class,里面有个变量in m=8,在类初始化的时候,首先会创建变量m,然后赋初始值0,即m=0,再m赋值为变量8,再变量m的指针指向8这个值,这里面jvm的优化,可能会变量的引用会先指向8,再赋值m=8,这就发生了指令重排,再多线程编程时,可能读到的值是m=0,所以这时我们需要加上volatile修饰变量,防止指令重排序。
...
原创
2021-10-26 10:45:20 ·
178 阅读 ·
0 评论