Внутренне устройство AtomicInteger
Чтобы разобрать использование атомарных операций в Java рассмотрим следующий пример: public class Counter { int counter; public void increment() { counter++; } } В случае однопоточной среды это работает отлично; однако, как только мы разрешаем запись более чем одному потоку, мы начинаем получать противоречивые результаты. Причина этому в операции приращения (counter++), которая может выглядеть как атомарная операция, но на самом деле представляет собой комбинацию трех операций: получение значения, увеличение и обратная запись обновленного значения. Если два потока попытаются получить и обновить значение одновременно, это может привести к потере обновлений. Один из способов управления доступом к объекту - использование блокировок. Этого можно достичь, используя ключевое слово synchronized в сигнатуре метода приращения. Ключевое слово synchronized гарантирует, что только один поток может входить в метод одновременно: public class SynchronizedCounterWi...