JVM 指令重排序?
在执行程序时,为了提供性能,处理器和编译器常常会对指令进行重排序,但是不能随意重排序,不是你想怎么排序就怎么排序,它需要满足以下两个条件:
- 在单线程环境下不能改变程序运行的结果;
- 存在数据依赖关系的不允许重排序
重排序会产生问题,比如一个 boolean 类型的变量初始值是 false,然后后面是一段业务逻辑,执行完后将 boolean 的值置为 true,当指令重排序的时候可能会将业务顺序和变量赋值的顺序调整,这样的话就会有问题。
volatile 保证了原子可见性和顺序性,实现参见:https://github.com/JiyangM/spring/wiki/volatile
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论