gpt4 book ai didi

java - AtomicBoolean 中 getAndSet 和 compareAndSet 的区别

转载 作者:搜寻专家 更新时间:2023-10-30 19:55:20 26 4
gpt4 key购买 nike

线程标题应该是不言自明的......我对 AtomicBoolean 类的以下方法的规范有点困惑:

  • java.util.concurrent.atomic.AtomicBoolean#compareAndSet
  • java.util.concurrent.atomic.AtomicBoolean#getAndSet

我的假设是,当在 if 条件中用作 boolean 子句时,两者会导致相同的行为:

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);
}
}

假设我想检索当前标志值并自动更新它,这两种方法不应该产生相同的行为吗?

如果我遗漏了内部差异,我将非常感谢任何有关如何以及何时使用它们的解释。

最佳答案

documentation很清楚。

  • getAndSet --> "自动设置给定值并返回之前的值。"
  • compareAndSet --> “如果当前值 == 预期值,则以原子方式将值设置为给定的更新值。”

毫不奇怪,compareAndSet 有两个参数。

在您的具体情况下:

  • if (flag.getAndSet(false)) 会将 flag 设置为 false 仅当其先前的值为 true
  • 这相当于 if (flag.compareAndSet(true, false))

关于java - AtomicBoolean 中 getAndSet 和 compareAndSet 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28147654/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com