gpt4 book ai didi

java - 如何使用并发类在 Java 中递减一个字段并自动递增另一个字段

转载 作者:行者123 更新时间:2023-11-30 10:21:38 33 4
gpt4 key购买 nike

我有一个状态机 - 挂起和完成 - AtomicLong(线程)。我需要以原子方式递减 pending 和 increment completed

private final AtomicLong pending = new AtomicLong();
private final AtomicLong completed = new AtomicLong();

void markComplete() {
this.pending.decrementAndGet();
this.completed.incrementAndGet();
}

我可以通过使用 block 进行同步来使它成为原子的。但这似乎打败了并发对象的使用。

synchronized void markComplete() {
this.pending.decrementAndGet();
this.completed.incrementAndGet();
}

我想知道是否有更好的方法来做到这一点?

谢谢你帮助我。

最佳答案

如果 pendingcomplete 适合 int 范围(并且只要调用 markComplete 时 pending 大于零()) 你可以按照这些行做一些事情:

private final AtomicLong pendingAndComplete = new AtomicLong();

void markComplete() {
this.pendingAndComplete.addAndGet(1L<<32-1); // this is atomic
}
void markPending() {
this.pendingAndComplete.incrementAndGet(); // this is atomic
}

void doSomething() {
long current = this.pendingAndComplete.get(); // this fetches the current state atomically

int currentCompleted = (int)(current >> 32);
int currentPending = (int) current;
}

关于java - 如何使用并发类在 Java 中递减一个字段并自动递增另一个字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47765993/

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