2011-12-15 34 views
17

如果AtomicInteger達到Integer.MAX_VALUE並且遞增,會發生什麼情況?AtomicInteger遞增

該值是否回到零?

+16

您可以輕鬆地嘗試通過設置一個整數到最大值然後遞增它。 – Gabe 2011-12-15 00:59:27

回答

32

見自己:

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

輸出:

-2147483648 
-2147483648 

看起來它確實包裹到MIN_VALUE。

6

褐變的源代碼,他們只是有一個

private volatile int value; 

和,並且不同的地方,它們添加或從中減去它,例如在

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?