线程标题应该是自解释的... 我有点困惑于以下方法的规范,这些方法来自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);
}
}
假设我想自动检索当前标志值并更新它,这两种方法不应该产生相同的行为吗?如果我忽略了内部差异,请给出每种方法何时以及如何使用的任何解释。