我想了解getAndIncrement中的current
是如何更新的,下面是这段代码。Java AtomicInteger getAndIncrement()和compareAndSet
public final int getAndIncrement() {
for (;;) {
int current = get();
int next = current + 1;
if (compareAndSet(current, next))
return current;
}
}
我明白compareAndSet将比较电流值是否与存储在寄存器中的值,如果是相同的,然后更新接下来在寄存器中的值。
我不明白的是为什么不返回next
而不是current
。
当进入循环时,current
被设置为一个int并且current
不是一个参考值,所以如果电流被初始化为5,那么当它返回电流时,它是否也应该是5?或者当它返回current
时,current
将再次调用get()
以从寄存器中获取更新值?
因为您调用['getAndIncrement()'](http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicInteger.html#getAndIncrement--),它有点类似于postincrement操作符('i ++')。对于你描述的行为,有['incrementAndGet()'](http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicInteger.html#incrementAndGet--) ,类似于预增量运算符('++ i')。 – Turing85
我所问的是“当前”如何更新为原语,我只看到“当前”指的是更新的值? –
我不完全理解你的评论。 Java是按值传递的,所以'current'永远不会被改变,因此在你给出的例子中'5'将被返回。这回答了你的问题了吗? – Turing85