问答详情
源自:3-1 synchronized实现可见性原理

as-if-serial语义部分的不理解

在讲到as-if-serial,说到Java编译器、运行时和处理器都会保证Java在单线程下遵循as-if-serial语义。运行时是什么意思,感觉这句话的标点符号用得不对,导致我不是很明白,是不是说java编译器会保证~~,且java在运行的时候处理器会保证~~?

提问者:嘻嘻T溦 2017-06-22 00:43

个回答

  • 忧伤的帅哥
    2017-06-22 00:50:00
    已采纳

    不管怎么重排序(编译器和处理器为了提高并行度),(单线程)程序的执行结果不能被改变。

    java内存中的变量都有指针引用,上下文引用成链,这个链是不会被打乱重排序的,只有没有数据依赖关系的代码,才会被冲排序,所以在单线程内部重排序不会改变程序运行结果,这就是as-if-serial

  • 嘻嘻T溦
    2017-06-22 00:47:27

    编译器或运行时环境为了优化程序性能而采取的对指令进行重新排序执行的一种手段。