getAndSet 和 compareAndSet 在 AtomicBoolean 中的区别
2022-09-02 03:27:06
线程标题应为自解释性...我对类中以下methos的规范有点困惑:AtomicBoolean
java.util.concurrent.atomic.AtomicBoolean#compareAndSet
java.util.concurrent.atomic.AtomicBoolean#getAndSet
我的解释是,当在条件中用作布尔子句时,两者都会导致相同的行为:if
public class Test {
private AtomicBoolean flag = AtomicBoolean(false);
public void processSomeAction() {
if (flag.getAndSet(false)) { // Shouldn't this be similar to flag.compareAndSet(false)
// process some action
}
}
//...
private void internalMutatorMethod() {
// do some staff then update the atomic flag
flas.set(true);
}
}
假设我想检索当前标志值并自动更新它,这两种方法不应该产生相同的行为吗?
如果我错过了内部差异,我将不胜感激关于如何以及何时使用它们的任何解释。