我的代码包含一些AtomicBoolean
字段。只调用这些字段的get()
和set()
方法。仅当使用get()和set()方法时,用原始类型替换AtomicBoolean?
这些字段的类型可以安全地由原始布尔值替换吗?
我的意思是,原始布尔值的赋值和访问操作是Java中的原子操作。从这个角度来看,我看不出有什么理由在我的情况下使用AtomicBoolean
。
根据我的理解,AtomicBoolean
只有在使用像compareAndSet
这样的方法时才有意义,它将比较和访问相结合。我错了吗?你能解释为什么吗?
太宽泛而没有显示有问题的代码,但一般的答案是否定的。 –
您是否正在访问不同线程的字段? – VGR
有两种类型的竞争条件:check-then-act和read-modify-write。如果用原始布尔值替换AtomicBoolean,你的问题将会是前者。 – mre