Пакет java.util.concurrent.atomic
VarHandle. Экземпляры классов AtomicBoolean, AtomicInteger, AtomicLong и AtomicReference обеспечивают доступ к одной переменной соответствующего типа и её обновление. Каждый класс также предоставляет подходящие служебные методы для этого типа. Например, классы AtomicLong и AtomicInteger предоставляют атомарные методы инкремента. Один из вариантов применения — генерация последовательных номеров, например:
class Sequencer {
private final AtomicLong sequenceNumber
= new AtomicLong(17);
public long next() {
return sequenceNumber.getAndIncrement();
}
} Произвольные преобразования содержащегося значения обеспечиваются как низкоуровневыми операциями чтения-модификации-записи, такими как compareAndSet, так и высокоуровневыми методами, такими как getAndUpdate.
Эти классы не являются универсальной заменой
java.lang.Integer и связанных классов. Они не определяют такие методы, как equals, hashCode и
compareTo. Поскольку атомарные переменные предполагается изменять, они плохо подходят в качестве ключей хеш-таблиц.
Классы AtomicIntegerArray, AtomicLongArray и AtomicReferenceArray расширяют поддержку атомарных операций на массивы этих типов. Эти классы также примечательны тем, что предоставляют семантику доступа volatile для элементов своих массивов.
Помимо классов, представляющих отдельные значения и массивы, этот пакет содержит классы Updater, с помощью которых можно выполнять compareAndSet и связанные операции над любым выбранным полем volatile любого выбранного класса. Эти классы появились до введения VarHandle и имеют более ограниченную область применения. Классы AtomicReferenceFieldUpdater, AtomicIntegerFieldUpdater и AtomicLongFieldUpdater — это основанные на рефлексии средства, предоставляющие доступ к полям соответствующих типов. Они главным образом применяются в атомарных структурах данных, в которых несколько полей volatile одного узла (например, ссылки узла дерева) независимо подвергаются атомарным обновлениям. Эти классы обеспечивают большую гибкость в том, как и когда применять атомарные обновления, но требуют более громоздкой настройки на основе рефлексии, менее удобны в использовании и предоставляют более слабые гарантии.
Класс AtomicMarkableReference связывает одну логическую переменную с ссылкой. Например, этот бит можно использовать внутри структуры данных, чтобы обозначить, что объект, на который указывает ссылка, логически удалён. Класс AtomicStampedReference связывает целочисленное значение со ссылкой. Например, его можно использовать для представления номеров версий, соответствующих последовательности обновлений.
- Начиная с:
- 1.5
| Класс | Описание |
|---|---|
| AtomicBoolean | Значение boolean, которое можно атомарно обновлять. |
| AtomicInteger | Значение int, которое можно атомарно обновлять. |
| AtomicIntegerArray | Массив int, элементы которого можно атомарно обновлять. |
| AtomicIntegerFieldUpdater<T> | Основанное на рефлексии средство, позволяющее атомарно обновлять заданные поля volatile int указанных классов. |
| AtomicLong | Значение long, которое можно атомарно обновлять. |
| AtomicLongArray | Массив long, элементы которого можно атомарно обновлять. |
| AtomicLongFieldUpdater<T> | Основанное на рефлексии средство, позволяющее атомарно обновлять заданные поля volatile long указанных классов. |
| AtomicMarkableReference<V> | Экземпляр AtomicMarkableReference хранит ссылку на объект вместе с битом-маркером, которые можно атомарно обновлять. |
| AtomicReference<V> | Ссылка на объект, которую можно атомарно обновлять. |
| AtomicReferenceArray<E> | Массив ссылок на объекты, элементы которого можно атомарно обновлять. |
|
AtomicReferenceFieldUpdater<T, |
Основанное на рефлексии средство, позволяющее атомарно обновлять заданные поля ссылочного типа volatile указанных классов. |
| AtomicStampedReference<V> | Экземпляр AtomicStampedReference хранит ссылку на объект вместе с целочисленной «меткой», которые можно атомарно обновлять. |
| DoubleAccumulator | Одна или несколько переменных, совместно хранящих текущее значение double, обновляемое с помощью заданной функции. |
| DoubleAdder | Одна или несколько переменных, совместно хранящих сумму double, изначально равную нулю. |
| LongAccumulator | Одна или несколько переменных, совместно хранящих текущее значение long, обновляемое с помощью заданной функции. |
| LongAdder | Одна или несколько переменных, совместно хранящих сумму long, изначально равную нулю. |
© 1993, 2025, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/25/docs/api/java.base/java/util/concurrent/atomic/package-summary.html