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