【发布时间】:2015-03-24 17:17:23
【问题描述】:
线程标题应该是不言自明的......我对AtomicBoolean类的以下方法的规范有点困惑:
java.util.concurrent.atomic.AtomicBoolean#compareAndSetjava.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);
}
}
假设我想检索当前标志值并自动更新它,这两种方法不应该产生相同的行为吗?
如果我遗漏了内部差异,我将非常感谢有关如何以及何时使用它们的任何解释。
【问题讨论】:
-
compareAndSet 有两个参数。 javadoc 表明它与getAndSet 完全不同。 - 您可以编写与 getAndSet 相同的 compareAndSet 调用,但这几乎不值得提问。
标签: java synchronization atomic atomicboolean