关于java:Volatile Keyword没用时使用synchronized?

Volatile Keyword is of no use When using synchronized?

我试图理解Java中的易失性关键字的使用。我知道它会将数据写入主内存而不是线程缓存中。

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

我不应该使用synchronized,因为我不希望对其他线程进行脏读。那么在什么情况下易失性是有用的,也是最重要的?

请举个例子。


synchronized比普通volatile贵得多。

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

当需要执行复杂的操作、更新多个变量或在比较另一个变量时设置一个变量并确保此类操作的原子性时,synchronized非常有用。此外,它在使用更高级别的同步时使用,例如条件,即在Java中EDCOX1,0,EDCOX1,5,EDCX1,6。但也可以使用Lock/Condition


为了更好地解释如何使用易失性变量,您可以使用jb nizet的答案查看以下链接。它很好地补充了zbynek发布的答案,并进一步解释了易失性、原子变量和复杂性之间的关系。希望这有帮助。