有什么不同?
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);
你能解释一下
之间有什么区别吗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);