线程标题应该是不言自明的......我对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);
}
}
假设我想检索当前标志值并自动更新它,这两种方法不应该产生相同的行为吗?
如果我缺少内部差异,我将非常感谢有关如何以及何时使用其中的每一个的任何解释。