Просматривая исходный код, они просто имеют
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. JavaDocs для AtomicInteger ничего не говорит по этому вопросу (из того, что я видел), поэтому я думаю, что это поведение может измениться в будущем, но это кажется крайне маловероятным.
Существует AtomicLong, если это поможет.
см. Также Что происходит, когда вы увеличиваете целое число сверх его максимального значения?