volatile 关键字没用 啥时候用synchronized?

Posted

技术标签:

【中文标题】volatile 关键字没用 啥时候用synchronized?【英文标题】:Volatile Keyword is of no use When using synchronized?volatile 关键字没用 什么时候用synchronized? 【发布时间】:2016-05-17 19:40:26 【问题描述】:

我试图了解 volatile 关键字在 java 中的使用。我知道它会将数据写入主内存而不是线程缓存。

但这真的有用吗?我正在使用多线程和

我不应该使用同步,因为我不希望对其他线程进行脏读。那么在什么情况下 volatile 可能有用且最重要?

请举个例子。

【问题讨论】:

【参考方案1】:

synchronized 比普通的volatile 贵得多。

volatile 在您只需要读/写单个变量而不关心复杂结构的原子性时很有用。

synchronized 在您需要执行复杂操作、更新多个变量或在比较另一个变量时设置一个变量并确保此类操作的原子性时很有用。它也用于进行更高级别的同步,例如条件,即 java 中的 synchronized/wait/notify。但是对于那个Lock/Condition也可以使用。

【讨论】:

【参考方案2】:

为了更好地解释使用 volatile 变量,您可以查看以下 link 和 JB Nizet 的回答。它很好地补充了 Zbynek 发布的答案,并进一步解释了易失性、原子变量和复杂性之间的关系。希望这会有所帮助。

【讨论】:

以上是关于volatile 关键字没用 啥时候用synchronized?的主要内容,如果未能解决你的问题,请参考以下文章

在C语言的多线程编程中一般volatile应该用在啥地方?

C语言中volatile在啥情况下使用

volatile和synchronized关键字

volatile const int ci = 100;这是啥意思?

java里volatile关键字有啥特性?

Java多线程基础-第一节4:synchronized关键字(监视器锁monitor lock)和volatile关键字