[英]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.