volatile
принуждает использовать единственный экземпляр переменной, но не гарантирует атомарность. Например, операция count++
не станет атомарной просто потому, что count
объявлена volatile
. C другой стороны class AtomicInteger
предоставляет атомарный метод для выполнения таких комплексных операций атомарно, например getAndIncrement()
– атомарная замена оператора инкремента, его можно использовать, чтобы атомарно увеличить текущее значение на один. Похожим образом сконструированы атомарные версии и для других типов данных.