Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在哪种情况下';需要在原子字段中使用volatile关键字吗?_Java_Multithreading_Atomic_Race Condition_Volatile - Fatal编程技术网

Java 在哪种情况下';需要在原子字段中使用volatile关键字吗?

Java 在哪种情况下';需要在原子字段中使用volatile关键字吗?,java,multithreading,atomic,race-condition,volatile,Java,Multithreading,Atomic,Race Condition,Volatile,在哪些情况下,需要将volatile关键字与原子字段一起使用?或者如果字段是原子***关键字volatile是冗余的 谢谢你什么都不要 或者如果字段是原子***关键字volatile是冗余的 冗余或两者都不是正确的工具,具体取决于情况。无任何问题 或者如果字段是原子***关键字volatile是冗余的 根据情况,冗余或两者都不是正确的工具。确实没有理由使原子字段不稳定。原子场应该是最终的,否则使用它们就毫无意义了。如果你声明一个原子整数,比如 AtomicInteger integer = ne

在哪些情况下,需要将volatile关键字与原子字段一起使用?或者如果字段是原子***关键字volatile是冗余的

谢谢你

什么都不要

或者如果字段是原子***关键字volatile是冗余的

冗余或两者都不是正确的工具,具体取决于情况。

无任何问题

或者如果字段是原子***关键字volatile是冗余的


根据情况,冗余或两者都不是正确的工具。

确实没有理由使原子字段
不稳定。原子场应该是最终的,否则使用它们就毫无意义了。如果你声明一个原子整数,比如

AtomicInteger integer = new AtomicInteger(420);
可以通过其方法(如
incrementAndGet
)以原子方式访问它,但仍然可以通过直接分配字段来绕过它们,即分配一个新值,如
integer=new AtomicInteger(10)
而不是
integer.set(10)
这首先破坏了使用原子整数的全部目的。因此,应将其宣布为最终决定

final AtomicInteger integer = new AtomicInteger(420);

这确保了它只能使用其原子方法进行更改,而不能通过重新分配变量进行更改。当变量是
final
时,将其声明为
volatile
是毫无意义的-Java甚至不允许您这样做。因此,不存在将两者结合使用的实际场景。

确实没有理由使原子场波动。原子场应该是最终的,否则使用它们就毫无意义了。如果你声明一个原子整数,比如

AtomicInteger integer = new AtomicInteger(420);
可以通过其方法(如
incrementAndGet
)以原子方式访问它,但仍然可以通过直接分配字段来绕过它们,即分配一个新值,如
integer=new AtomicInteger(10)
而不是
integer.set(10)
这首先破坏了使用原子整数的全部目的。因此,应将其宣布为最终决定

final AtomicInteger integer = new AtomicInteger(420);

这确保了它只能使用其原子方法进行更改,而不能通过重新分配变量进行更改。当变量是
final
时,将其声明为
volatile
是毫无意义的-Java甚至不允许您这样做。因此,不存在将两者结合使用的实际场景。

差异在
Java并发性实践
一书中很好地提到:

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

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

差异在
Java并发性实践中得到了很好的体现。
一书:

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

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

如果需要修改引用,可能会很有用,但这并不常见。如果需要修改引用,可能会很有用,但这并不常见。