【发布时间】:2023-03-13 22:20:02
【问题描述】:
我的代码包含一些AtomicBoolean 字段。仅调用这些字段的get() 和set() 方法。
这些字段的类型可以安全地替换为原始布尔值吗?
我的意思是,原始布尔值的赋值和访问操作是 Java 中的原子操作。从这个角度来看,我看不出有任何理由使用AtomicBoolean。
在我的理解中,AtomicBoolean 只有在使用像 compareAndSet 这样结合比较和访问的方法时才有意义。我错了吗?你能解释一下为什么吗?
【问题讨论】:
-
太宽泛而没有显示有问题的代码,但一般答案是否定的。
-
您是否从不同的线程访问字段?
-
有两种竞争条件:check-then-act 和 read-modify-write。如果您将
AtomicBoolean替换为原始布尔值,您的问题将是前者。 -
是的,我正在从不同的线程访问它们
-
@mre 为什么会发生这种情况?该代码未使用
compareAndSet()或任何类似方法。
标签: java atomic atomicboolean