多线程的指令重排问题:as-if-serial语义,happens-before语义;volatile关键字,volatile和synchronized的区别
一、指令重排的问题你写的代码有可能,根本没有按照你期望的顺序执行,因为编译器和 CPU 会尝试指令重排来让代码运行更高效,这就是指令重排。1|11.1 虚拟机层面我们都知道CPU执行指令的时候,访问内存的速度远慢于 CPU 速度。为了尽可能减少内存操作带来的 CPU 空置的影响,虚拟机会按照自己的一些规则将程序编写顺序打乱:即写在后面的代码在时间顺序上可能会先执行,而写在前面的代码会后执行。当然这样的前提是不会产生错误。不管谁先开始,总之后面的代码在一些情况下存在先结束的可能。1
转载
2022-01-27 17:36:56 ·
226 阅读 ·
0 评论