使用关键字volatile可以禁止代码的重排序: 在Java程序运行时,JIT(即使编译器)可以动态地改变程序代码运行地顺序:例如,有如下代码: A代码-重耗时 B代码-轻耗时 C代码-重耗时 D代码-轻耗时 在多线程环境下,JIT有可能进行代码重排序,重排序后地代码顺序有可能如下: B代码-轻耗时 D代码-轻耗时 A代码-重耗时 C代码-重耗时 这样做地主要原因是CPU流水线是同时执行这4个指令的,那么轻耗时的代码在很大程度上先执行完成,以让出CPU流水线给其他指令,所以代码重排序是为了追求更…