volatile有禁止指令重排序的功能,synchronized有没有禁止指令重排序的功能

来源:9-5 jmm的内存可见性

qq_大雨还在下_03432217

2020-09-10

volatile有禁止指令重排序的功能,synchronized有没有禁止指令重排序的功能

写回答

1回答

翔仔

2020-09-11

没有重排序功能。就跟课程里面说的一样

synchronized 和 volatile 的有序性与可见性是两个角度来看的:

synchronized 是因为块与块之间看起来是原子操作,块与块之间有序可见

volatile 是在底层通过内存屏障防止指令重排的,变量前后之间的指令与指令之间有序可见

同时,synchronized 和 volatile 有序性不同也是因为其实现原理不同:


synchronized 靠操作系统内核互斥锁实现的,相当于 JMM 中的 lock 和 unlock。退出代码块时一定会刷新变量回主内存

volatile 靠插入内存屏障指令防止其后面的指令跑到它前面去了

0
2
翔仔
回复
qq_大雨还在下_03432217
我上面一开始已经回答你的问题了呀,没有
2020-09-12
共2条回复

剑指Java面试-Offer直通车 百度资深面试官授课

招聘季即将到来,让百度资深面试官来为你的高薪Offer保驾护航

8441 学习 · 1872 问题

查看课程