gpt4 book ai didi

java - 是否有 != 值的compareAndSet (compareAndSetIfUnequal)?

转载 作者:行者123 更新时间:2023-12-01 09:08:22 25 4
gpt4 key购买 nike

我经常遇到这样的情况:如果出现与预期不同的情况,就会触发一个操作。不幸的是,compareAndSet 不适合这种原子问题。我需要类似compareAndSetIfUnequal 的东西。目前我使用类似下面的代码,但恐怕它很昂贵:

private AtomicReference<T> atomic = new AtomicReference<T>(null);
public static void doIfUnequal(T obj) {
if(atomic.getAndSet(obj) != obj) {
doSomething();
}
}

最佳答案

假设您担心示例中重复使用 getAndSet,我首先想提醒您在过分担心之前先对代码进行分析。你的代码很干净。

但是,如果您想避免“set”部分(以及原子操作的相关硬件开销),则需要使用 get 和compareAndSet 自行循环这一部分:

private AtomicReference<T> atomic = new AtomicReference<T>(null);
public static void doIfUnequal(T obj) {
T curVal;
while((curVal = atomic.get()) != obj) {
if(atomic.compareAndSet(curVal, obj)) {
doSomething();
break;
}
}
}

关于java - 是否有 != 值的compareAndSet (compareAndSetIfUnequal)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41074169/

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