gpt4 book ai didi

java - 当仅使用 get() 和 set() 方法时,将 AtomicBoolean 替换为原始类型?

转载 作者:行者123 更新时间:2023-12-02 16:00:09 28 4
gpt4 key购买 nike

我的代码包含一些 AtomicBoolean 字段。仅调用这些字段的 get()set() 方法。

这些字段的类型可以安全地替换为原始 boolean 值吗?

我的意思是,原始 boolean 值的赋值和访问操作是 Java 中的原子操作。从这个角度来看,我看不出有任何理由在我的例子中使用 AtomicBoolean

根据我的理解,AtomicBoolean 仅在使用诸如 compareAndSet 之类的方法(将比较和访问结合起来)时才有意义。我这样说有错吗?你能解释一下原因吗?

最佳答案

原子变量在Java并发实践中被描述为“更好的 volatile ”(参见第15.3节)。以下是本书的摘录:

The atomic variable classes provide a generalization of volatile variables to support atomic conditional read-modify-write operations. AtomicInteger represents an int value, and provides get and set methods with the same memory semantics as reads and writes to a volatile int.

应用于您的情况,这意味着如果您仅使用 AtomicBooleanget()set() 方法,它们可以安全地替换为对 volatile boolean 值的读写。

需要

volatile 来保证所有线程都会看到变量的最新值。回到实践中的 Java 并发(第 3.1.4 节):

When a field is declared volatile, the compiler and runtime are put on notice that this variable is shared and that operations on it should not be reordered with other memory operations. Volatile variables are not cached in registers or in caches where they are hidden from other processors, so a read of a volatile variable always returns the most recent write by any thread.

关于java - 当仅使用 get() 和 set() 方法时,将 AtomicBoolean 替换为原始类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43379874/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com