【问题标题】:Volatile keyword on Atomic Variable原子变量上的可变关键字
【发布时间】:2020-08-08 17:50:14
【问题描述】:

以下代码在Java中有效

volatile AtomicInteger a = new AtomicInteger(123);

我们是否需要在 AtomicInteger 等原子变量上使用 volatile 关键字?还是volatile是多余的?

【问题讨论】:

  • 您可能应该使用final,而不是volatile。如果final 对您不起作用,那么您要么在做一些非常棘手的事情,要么您可能会犯错误。不要忘记变量a 不是AtomicIntegera 变量持有对可变AtomicInteger 堆对象的引用。在使用AtomicInteger 的正常方式中,程序的不同部分及其不同的线程都将通过变异和检查同一个共享对象进行通信,而通过更改a 变量的对象来进行通信指。

标签: java multithreading synchronization volatile atomicinteger


【解决方案1】:

对于大多数理智的用例来说这是多余的,但可以想象它适用于一些奇怪的情况——我想不出任何。如有疑问,请使用final

【讨论】:

    【解决方案2】:

    volatile 是多余的,因为 AtomicInteger 中的变量已经是 volatile 并且将提供所需的发生之前的关系。只需将字段设为final即可。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-20
      • 2021-07-15
      • 2019-05-15
      • 1970-01-01
      • 2013-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多