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は、それが次いで次とレジスタの値を更新し、同じであれば電流値は、レジスタに格納された値と同じであるかどうかを比較することを理解します。
current
の代わりにnext
を返さない理由は分かりません。
current
はintとして設定され、current
は参照値ではないため、現在の値が5に初期化されている場合は現在の値が5に初期化されます。または、current
を返すと、current
はget()
と呼ばれ、レジスタから更新された値を取得します。
[getAndIncrement() '](http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicInteger.html#getAndIncrement--)を呼び出すため、ポストインクリメント演算子( 'i ++')と幾分似ています。あなたが記述した動作については、['incrementAndGet()'](http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicInteger.html#incrementAndGet--)があります。これはプリインクリメント演算子( '++ i')に似ています。 – Turing85
私が求めているのは、「現在」がプリミティブとして更新されていることです。「現在」が参照する値のみが更新されています。 –
私はあなたのコメントを完全に理解していません。 Javaは値渡しであるため、 'current'は決して変更されないので、あなたの与えられた例では' 5'が返されます。これはあなたの質問に答えますか? – Turing85