このコードについて私に説明してもらえますか?内部の原子関数
public class Counter {
private AtomicInteger value = new AtomicInteger();
public int incrementLongVersion(){//THIS PART2!!!
int oldValue = value.get();
while (!value.compareAndSet(oldValue, oldValue+1)){
oldValue = value.get();
}
return oldValue+1;
}
}
私はなぜ私はちょうど
false
にこのコード
!value.compareAndSet(oldValue, oldValue+1)
を変更することはできません意味ですか?コンパイルエラーが発生することはありませんでしたが、理由は何ですか?
!value.compareAndSet(oldValue, oldValue+1)
エラーはありません。それはあまりにも正しく偽ではないですか?
なぜ、私はそのループをクリアして "oldValue + 1"を返すだけでいいのですか?
ありがとうございます。あなたはは、その関数が何をするか、しかし、コンパイラは常にこの場合はfalseを、同じになり、戻り値をチェックするために与えられたメソッド呼び出しの本体を解析しません知っているfalse
ので
あなたが戻ってきたら、古い値をどのように覚えているので、増分することができますか? –
はい、 'AtomicInteger'には独自のインクリメントメソッドがあります。 –
いいえ、それは常に偽ではありません。 –