concurrent - how to initialize atomicinteger in java
Incremento de AtomicInteger (2)
¿Qué sucede si AtomicInteger
alcanza Integer.MAX_VALUE
y se incrementa?
¿El valor vuelve a cero?
Trayendo el código fuente, solo tienen un
private volatile int value;
y, y varios lugares, agregan o restan de él, por ejemplo, en
public final int incrementAndGet() {
for (;;) {
int current = get();
int next = current + 1;
if (compareAndSet(current, next))
return next;
}
}
Por lo tanto, debe seguir las matemáticas enteras estándar de Java y envolverlas en Integer.MIN_VALUE. Los JavaDocs para AtomicInteger guardan silencio sobre el tema (por lo que vi), así que supongo que este comportamiento podría cambiar en el futuro, pero parece extremadamente improbable.
Hay un AtomicLong si eso ayudaría.
vea también ¿Qué sucede cuando incrementa un número entero más allá de su valor máximo?
Ver por ti mismo:
System.out.println(new AtomicInteger(Integer.MAX_VALUE).incrementAndGet());
System.out.println(Integer.MIN_VALUE);
Salida:
-2147483648
-2147483648
Parece que se ajusta a MIN_VALUE.