显然,先执行flag=true可以提前使用CPU,加快整体效率,当然这样的前提是不会产生错误。不管谁先开始,总之后面的代码在一些情况下存在先结束的可能。编译器、运行时和处理器都必须遵守“as-if-serial”语义。拿个简单例子来说,这里a=0,b=1两句可以随便排序,不影响程序逻辑结果,但c=a+b这句必须在前两句的后面执行。这里强调的是同一个锁,而“后面”指的是时间上的先后顺序,如发生在其他线程中的lock操作。

浅谈java指令重排序的问题

浅谈java指令重排序的问题

浅谈java指令重排序的问题