关于先行先发生原则的一个问题

先行先发生原则中有一条,程序次序规则:同一个线程内,按照代码出现的顺序,前面的代码先行于后面的代码,准确的说是控制流顺序,因为要考虑到分支和循环结构。

但是有的地方又说,"int j = 2"的代码完全可能先被处理器执行。(《深入理解java虚拟机》 p378)
示例代码如下:
//以下操作在同一个线程中执行
int i = 1;
int j = 2;

这是为什么呢??
#Java工程师#
全部评论
可不可以这样理解: "int j = 2"的代码完全可能先被处理器执行,这并不影响先行先发生原则,因为我们在这条线程中没有办法感知到这点。(都是赋值操作,无论先发生哪一个,最终结果都与顺序执行一样)。 但如果有其他线程在读取这两个值,指令重排序就会造成读取错误!
点赞 回复 分享
发布于 2017-06-29 21:13
这两个数据没有依赖性,所以可以重排序
点赞 回复 分享
发布于 2017-07-03 12:21
虚拟机保证单线程内看到的数据是有序的,因为她们不存在依赖关系,不同执行顺序结果是一样的。但是如果在不同的线程间就不能保证了
点赞 回复 分享
发布于 2017-06-30 08:48
因为数据不存在依赖关系
点赞 回复 分享
发布于 2017-06-30 08:44
因为处理器会因为提高速度而对指令进行重排序呀。
点赞 回复 分享
发布于 2017-06-30 01:22
单独线程内,只要数据不存在依赖关系,编译器和处理器是可以对操作进行重排序的
点赞 回复 分享
发布于 2017-06-29 21:33

相关推荐

不愿透露姓名的神秘牛友
06-27 15:19
简历上能写3个月吗?
码农索隆:大胆写,主要你能把实习经历包装好,可以看一下我这篇帖子https://www.nowcoder.com/share/jump/4888395581180798063
点赞 评论 收藏
分享
点赞 评论 收藏
分享
06-23 11:43
门头沟学院 Java
allin校招的烤冷...:我靠,今天中午我也是这个hr隔一个星期发消息给我。问的问题还是一模一样的😅
点赞 评论 收藏
分享
06-25 21:00
门头沟学院 Java
多拆解背记一下当前的高频场景面试题,结合自己的项目经历去作答,面试通过率原来真的不会低!
牛客96559368...:小公司不就是这样的吗,面试要么是点击就送,要么就是往死里拷打,没有一个统一的标准。这个不能代表所有公司
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务