Пакет java.util.concurrent.atomic содержит несколько классов, которые внутри используют CAS (Compare-And-Swap) операции для обеспечения потокобезопасности без явной синхронизации.
Наиболее часто используемые классы:
AtomicInteger — для потокобезопасных операций с целыми числамиAtomicLong — для потокобезопасных операций со значениями типа longAtomicBoolean — для потокобезопасных операций с булевыми значениямиAtomicReference — для потокобезопасных ссылок на объектыAtomicIntegerArray — для потокобезопасных массивов целых чиселAtomicLongArray — для потокобезопасных массивов longAtomicReferenceArray — для потокобезопасных массивов объектовЭти классы используют CAS (Compare-And-Swap) на уровне железа для достижения атомарности. CAS операция:
Такой подход избавляет от необходимости в блокировках, обеспечивая более высокую производительность и параллелизм в многопоточной среде.
Все атомарные классы предоставляют схожий набор операций:
get() — получить текущее значениеset(value) — установить новое значениеgetAndSet(value) — атомарно получить текущее значение и установить новоеcompareAndSet(expect, update) — выполнить CAS операциюincrementAndGet() / decrementAndGet() — атомарные арифметические операции (где применимо)Использование этих классов гарантирует потокобезопасный доступ к общим переменным без явных блокировок, что делает их отличным выбором для высоконагруженных сценариев, где критична производительность.
Классы AtomicInteger и AtomicLong используют CAS операции внутри себя, чтобы избежать необходимости в явных блокировках синхронизации, сохраняя при этом потокобезопасность.
Новый — ещё не проверен сообществом
Вы