synchronized有没有同样的功能
1.6k
等16人参与

描述:
volatile关键字有禁止指令重排序的功能,那么问题来了,synchronized有没有同样的功能呢?

思路:
synchronized 和 volatile 的有序性与可见性是两个角度来看的:
synchronized 是因为块与块之间看起来是原子操作,块与块之间有序可见(块指的是被synchronized修饰带一整块代码)
volatile 是在底层通过内存屏障防止指令重排的,变量前后之间的指令与指令之间有序可见。
同时,synchronized 和 volatile 有序性不同也是因为其实现原理不同:
synchronized 是靠操作系统内核互斥锁来实现,相当于 JMM 中的 lock 和 unlock。退出代码块时一定会刷新变量回主内存
volatile 是靠插入内存屏障指令防止其后面的指令跑到它前面去了。因此答案显而易见,synchronized不具备类似的功能。

我的作业
去发布

登录后即可发布作业,立即

全部作业

数据加载中...

意见反馈 帮助中心 APP下载
官方微信