使用synchronized时,易失性关键字是没用的?

时间:2016-02-08 07:47:59

标签: java multithreading volatile

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

但这真的很有用。我正在使用多线程和

我不应该使用同步原因我不想让脏读到其他线程。那么在什么样的情况下,volatile可能是有用的,最重要的是使用?

请举一些例子。

2 个答案:

答案 0 :(得分:2)

synchronized比普通volatile贵得多。

当你只需要读/写单个变量并且不关心复杂结构的原子性时,

volatile很有用。

当您需要执行复杂操作,更新多个变量或在比较另一个变量时设置一个变量并确保此类操作的原子性时,

synchronized非常有用。此外,它还用于执行更高级别的同步,例如条件,即java中的synchronized / wait / notify。但是,也可以使用Lock / Condition

答案 1 :(得分:0)

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