volatile为什么能禁止指令重排 ??
1 什么是指令重排?
Java 内存模型允许编译器和处理器对指令重排序以提高运行性能, 并且只会对不存在数据依赖性的指令重排序。在单线程下重排序可以保证最终执行的结果与程序顺序执行的结果一致,但是在多线程下就会存在问题。
int i = 1; //(1)
int j = 2; //(2)
int k = i + j; //(3)
如上代码,变量K的值依赖 i 和 j 的值,所以重排序后能操作 (3) 的操作在 1,2之后。1和2谁先执行就不一定了,不过在单线程中不会有什么问题,下面看一个多线程的例子:
p
原创
2021-07-02 09:35:43 ·
1506 阅读 ·
0 评论