gpt4 book ai didi

java - compareAndSet 与 incrementAndGet

转载 作者:行者123 更新时间:2023-12-01 05:00:19 24 4
gpt4 key购买 nike

正在学习并发编程类(class)。

举个例子

final class Counter {

private AtomicInteger value;

public long getValue() {
return value.get();
}

public long increment() {
int v;
do {
v = value.get();
}
while(!value.compareAndSet(v, v+1));
return v+1;
}
}

为什么在这种情况下使用 compareAndSet 而不是 incrementAndGet ?

谢谢

最佳答案

这里是我机器上的 JDK 版本的 AtomicInteger.incrementAndGet() 方法的实现:

/**
* Atomically increments by one the current value.
*
* @return the updated value
*/
public final int incrementAndGet() {
for (;;) {
int current = get();
int next = current + 1;
if (compareAndSet(current, next))
return next;
}
}

如您所见,实现与您的非常相似。

PS:为什么要计算 v+1 两次?

关于java - compareAndSet 与 incrementAndGet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6082990/

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