有什么不同?

What is the difference?

你能解释一下

之间有什么区别吗
i.compareAndSet(i.get(), i.get() + 1)

int s = i.get();
int nextS = s + 1;
i.compareAndSet(s, nextS);

其中 i 是一个 AtomicInteger。如果我想获得 i 的增量值,我认为第一种方法是错误的吗?但我无法解释为什么。

第一种方式调用 i.get() 两次。由于此处没有锁定,这两个调用可能 return 不同的值,这可能不是您所期望的。

I want to get next value of int

那么你可能根本不想要 compareAndSet,你想要 updateAndGet:

updated = i.updateAndGet(value -> value + 1);

getAndUpdate 如果您想要更新前的值:

previous = i.getAndUpdate(value -> value + 1);