繁体   English   中英

在哪种情况下,需要在Atomic字段中使用volatile关键字?

[英]In which situations it's needed to use volatile keyword with Atomic field?

在哪种情况下,需要在Atomic字段中使用volatile关键字? 还是如果字段是Atomic ***关键字volatile是多余的?

谢谢

确实没有理由使原子场变得volatile 原子场应该是最终的,否则使用它们真的没有意义。 如果声明一个原子整数就好。

AtomicInteger integer = new AtomicInteger(420);

它可以通过以原子其方法,例如可以访问incrementAndGet ,但它仍然是可能的通过直接即分配这样的新值分配领域绕过它们integer = new AtomicInteger(10)而不是integer.set(10)其违背了首先使用AtomicInteger全部目的。 因此,应将其声明为最终的

final AtomicInteger integer = new AtomicInteger(420);

这样可以确保只能使用其原子方法来更改它,而不能通过重新分配变量来更改它。 当变量为final ,将其声明为volatile也毫无意义-Java甚至不允许您这样做。 因此,没有,没有实际的方案可以将两者一起使用。

Java Concurrency In Practice书中很好地提到了差异:

  • 易失性提供内存可见性保证
  • 原子变量提供内存可见性原子性

因此, 无需将volatile关键字与AtomicXXX变量一起使用。

没有任何。

还是如果字段是Atomic ***关键字volatile是多余的?

视情况而定,要么冗余,要么两者都不是正确的工具。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM