重排序的问题

来源:13-6 可见性

CoffeePlayer

2020-07-01

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

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

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

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

写回答

1回答

悟空

2020-07-01

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

所以:

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


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

0
3
悟空
回复
孤独的根号_刘128
什么意思?
2020-12-07
共3条回复

线程八大核心+Java并发原理及企业级并发解决方案

完整的并发知识网络+丰富的工作内容分享+50余道并发高频面试题

2512 学习 · 939 问题

查看课程