开发者社区> 问答> 正文

volatile 与有序性之间,有什么联系?

volatile 与有序性之间,有什么联系?

展开
收起
开发者小助手_LS 2021-11-03 18:23:02 807 0
1 条回答
写回答
取消 提交回答
  • 除了引入了时间片以外,由于处理器优化和指令重排等,CPU 还可能对输入代码进行乱序执行,比如load->add->save 有可能被优化成load->save->add 。这就是可能存在有序性问题。

    而volatile 除了可以保证数据的可见性之外,还有一个强大的功能,那就是他可以禁止指令重排优化等。

    普通的变量仅仅会保证在该方法的执行过程中所依赖的赋值结果的地方都能获得正确的结果,而不能保证变量的赋值操作的顺序与程序代码中的执行顺序一致。

    volatile 可以禁止指令重排,这就保证了代码的程序会严格按照代码的先后顺序执行。

    这就保证了有序性。被volatile 修饰的变量的操作, 会严格按照代码顺序执行,load->add->save 的执行顺序就是:load、add、save。

    资料来源:《Java工程师成神之路(基础篇)》,链接:https://developer.aliyun.com/topic/download?id=923

    2021-11-03 19:14:22
    赞同 展开评论 打赏
来源圈子
更多
收录在圈子:
阿里云开发者社区官方技术圈,用户产品功能发布、用户反馈收集等。
问答排行榜
最热
最新

相关电子书

更多
原子变量与内存模型 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载