什么是差异?

3
你能解释一下什么是两者之间的区别吗?
i.compareAndSet(i.get(), i.get() + 1)

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

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


2
“错误”是以什么方式出现的?这取决于您想要实现什么! - luk2302
它们是不同的,但这并不意味着其中一个是对的,另一个是错的。这完全取决于你想要什么结果。它可以是第一个,第二个,或者完全不同的东西。 - T.J. Crowder
我想要获取 int 的下一个值。 - Anna
2个回答

5
第一种方式调用了i.get()两次。由于这里没有加锁,所以这两次调用可能会返回不同的值,这可能不是你想要的结果。

3

我想获得int的下一个值

那么您可能根本不需要使用compareAndSet,而是需要使用updateAndGet

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

如果你想要更新前的先前值,则可以使用 getAndUpdate

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接