请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

重排序的问题

对于synchronized,是不是不能防止重排序?

如下
a = 3;
synchronized( this) { b = 2 ;}
这里的a 和 b能发生重排序吗?

synchronized(this) { a = 1 ; b = 2 ;} 这里的a 和 b能发生重排序吗?

对于重排序,看了这些视频,讲到了 有依赖关系的代码不能发生重排序,和被volatile修饰的变量不能发生重排序。 是否还有其他的情况不能发生重排序。

正在回答

1回答

悟空 2020-07-01 20:16:35

synchronized能保证它自身的happens-before,只要满足happens-before,就可以重排序。

所以:

a = 3;
synchronized( this) { b = 2 ;}
这里的a 和 b能发生重排序吗?:可以


synchronized(this) { a = 1 ; b = 2 ;} 这里的a 和 b能发生重排序吗?:可以

0 回复 有任何疑惑可以回复我~
  • 提问者 CoffeePlayer #1
    非常感谢!
    回复 有任何疑惑可以回复我~ 2020-09-08 17:33:03
  • 悟空老师,针对synchronized 的重排序是
    synchronized(this){b=2};
    a=3;
    的这种情况吧
    回复 有任何疑惑可以回复我~ 2020-12-05 23:42:22
  • 什么意思?
    回复 有任何疑惑可以回复我~ 2020-12-07 15:33:16
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信