【发布时间】:2023-03-08 22:04:01
【问题描述】:
我试图了解 volatile 关键字在 java 中的使用。我知道它会将数据写入主内存而不是线程缓存。
但这真的有用吗?我正在使用多线程和
我不应该使用同步,因为我不希望对其他线程进行脏读。那么在什么情况下 volatile 可能有用且最重要?
请举个例子。
【问题讨论】:
标签: java multithreading volatile
我试图了解 volatile 关键字在 java 中的使用。我知道它会将数据写入主内存而不是线程缓存。
但这真的有用吗?我正在使用多线程和
我不应该使用同步,因为我不希望对其他线程进行脏读。那么在什么情况下 volatile 可能有用且最重要?
请举个例子。
【问题讨论】:
标签: java multithreading volatile
synchronized 比普通的volatile 贵得多。
volatile 在您只需要读/写单个变量而不关心复杂结构的原子性时很有用。
synchronized 在您需要执行复杂操作、更新多个变量或在比较另一个变量时设置一个变量并确保此类操作的原子性时很有用。它也用于进行更高级别的同步,例如条件,即 java 中的 synchronized/wait/notify。但是对于那个Lock/Condition也可以使用。
【讨论】:
为了更好地解释使用 volatile 变量,您可以查看以下 link 和 JB Nizet 的回答。它很好地补充了 Zbynek 发布的答案,并进一步解释了易失性、原子变量和复杂性之间的关系。希望这会有所帮助。
【讨论】: