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?的主要内容,如果未能解决你的问题,请参考以下文章
volatile const int ci = 100;这是啥意思?
Java多线程基础-第一节4:synchronized关键字(监视器锁monitor lock)和volatile关键字