AtomicInteger, AtomicLong, AtomicBoolean, AtomicDouble



• Атомики предоставляют возможность изменения переменной в нескольких потоках без эффекта гонок.

• Например, 10 тредов инкрементят AtomicInt = 0, основной тред ждет их выполнения через countdown-latch, далее проверка атомика должна показать 10.

• Основной механизм под капотом атомиков — цикл cas (compare-and-set). На примере increment:

1. Читаем старое значение

2. Перед set'ом проверяем старое значение, если оно не изменилось, сетаем старое + 1

3. Если изменилось, в след. итерации получаем «новое» старое, далее см. п. 1