你能给我解释一下这两者的区别吗
i.compareAndSet(i.get(), i.get() + 1)
和
int s = i.get();
int nextS = s + 1;
i.compareAndSet(s, nextS);
,其中i
为AtomicInteger
。如果我想获得i
的增量值,第一种方法是错误的,我是对的吗?但我不能解释为什么。
第一种方法两次调用i.get()
。由于这里没有锁,两个调用可能返回不同的值,这可能不是您所期望的。
我想要得到int 的下一个值
那么你可能根本不想要compareAndSet
,你想要updateAndGet
:
updated = i.updateAndGet(value -> value + 1);
或getAndUpdate
,如果您想要更新之前的值:
previous = i.getAndUpdate(value -> value + 1);