如果两个操作的执行顺序无法从happens-before原则推出来,虚拟机就可以随意对他们重排序??
来源:4-1 安全发布对象-发布与逸出
慕神8359304
2019-01-20
如果两个操作的执行顺序无法从happens-before原则推出来,虚拟机就可以随意对他们重排序??这句不是太理解,老师您可以举个例子吗,什么情况下两个操作不满足before原则,谢谢
写回答
1回答
-
Jimin
2019-01-20
你好,这个举个简单的例子方便你理解。
首先呢,使用了一些关键字的代码synchronized、volatile这种的比较特殊,这种会强制做一些同步处理,很多时候也不允许做重排序
其次呢,看是否可能会重排序其实很容易(但是,可能重排序不代表一定会重排序):放在单线程里看,如果两行代码可以交换位置,那么他们就可能会发生重排序,举个实际例子感受一下:
1、int a=1
2、int b=2
3、b=b+a
4、int c=3
这里1、2两行可能重排序,但是3肯定发生在1、2之后,因此3不会和1、2发生重排序(实际中,2、3可能会被优化位int b=3一步);4和1、2、3没任何关系,可以提前到任何一步112019-01-21
相似问题