volatile 关键字禁止 JVM 编译器以及处理器对其进行重排序,所以它能够保证有序性。
synchronized 关键字所修饰的同步方法可以保证顺序性,但是这中顺序性是以程序串行化执行换来的,在 synchronized 关键字所修饰的代码块中代码指令也会发生指令重排序的情况,比如:
synchronized(this){
int x = 10;
int y = 20;
x++;
y = y+1;
}
x 和 y 谁先定义以及谁先进行运算,对程序来说没有任何影响,另外 x 和 y 之间也没有依赖关系,但是由于 synchronized 关键字同步的作用,在 synchronized 的作用域结束时 x 必定是 11,y 必定是21,也就是说达到了最终的输出结果和代码编写顺序一致性。
《新程序员》:云原生和全面数字化实践
50位技术专家共同创作,文字、视频、音频交互阅读
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/chengqiuming/article/details/124056315
内容来源于网络,如有侵权,请联系作者删除!