【问题标题】:When should we define fields as "volatile"? When is it unnecessary? [duplicate]我们什么时候应该将字段定义为“易失性”?什么时候不需要? [复制]
【发布时间】:2016-10-18 15:55:05
【问题描述】:

我知道 volatile 应该用在类字段上,以防止 JVM 缓存该值,以便在读取时它始终是最新值。

如果我的理解是正确的,是不是意味着在多线程线程安全环境中工作时,我们应该用volatile 定义所有字段?什么时候不需要将字段定义为volatile

【问题讨论】:

  • 我们应该用 volatile 定义所有字段 每个对象的每个字段?不可以。只有多个并发线程可以访问的字段。
  • volatile 会阻止 JVM 优化与变量相关的代码,如果将所有字段都定义为 volatile,则会损失很多性能。

标签: java multithreading concurrency


【解决方案1】:

如果没有其他机制提供同步(例如locks),多个线程无法访问该字段,则无需定义字段volatile

如果一个类的每个成员都可以被访问,那么每个字段都应该被标记。

【讨论】:

  • @meriton 好点!我的编辑解决了吗?
猜你喜欢
  • 2022-01-07
  • 1970-01-01
  • 2013-10-31
  • 2014-04-24
  • 2021-09-07
  • 1970-01-01
  • 2019-07-17
  • 2012-09-16
  • 1970-01-01
相关资源
最近更新 更多