2011-12-15 16 views
17

AtomicIntegerInteger.MAX_VALUEに達してインクリメントされるとどうなりますか?AtomicIntegerインクリメント

値はゼロに戻りますか?

+16

整数を最大値に設定してからインクリメントすることで、簡単にこれを試すことができます。 – Gabe

+5

nullはこのネーム番号 –

+7

+1ではありません!私はスタックオーバーフローのポイントは、このような質問に答えるためのものであり、誰かが質問をするのが悪いと感じさせるものではないと思います。要点は、ユーザーが自分自身で「把握」できるかどうかではありません。彼らは合法的に助けを必要とし、我々はそれを提供するためにここにいる。 –

答えて

32

も参照してくださいを参照してください。

System.out.println(new AtomicInteger(Integer.MAX_VALUE).incrementAndGet()); 
System.out.println(Integer.MIN_VALUE); 

は出力:

-2147483648 
-2147483648 

それはMIN_VALUEにラップをしているように見えます。

6

Browingソースコード、彼らは

private volatile int value; 

を有しており、そして様々な場所、それらは例えば、追加またはそこから差し引きますin

public final int incrementAndGet() { 
    for (;;) { 
     int current = get(); 
     int next = current + 1; 
     if (compareAndSet(current, next)) 
     return next; 
    } 
} 

したがって、これは標準的なJava整数の計算に従い、Integer.MIN_VALUEにラップアラウンドする必要があります。 AtomicIntegerのJavaDocsは、(私が見たものから)この問題については何も話していないので、この動作は将来変更されるかもしれないと思うが、それは非常に起こりそうにない。

AtomicLongがあれば役立ちます。

は自分のためWhat happens when you increment an integer beyond its max value?

関連する問題