Пакет 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 указанных классов. Предоставляет часть функциональности класса VarHandle, который рекомендуется использовать вместо него. |
| AtomicLong | Значение long, которое можно атомарно обновлять. |
| AtomicLongArray | Массив long, элементы которого можно атомарно обновлять. |
| AtomicLongFieldUpdater<T> | Основанное на рефлексии служебное средство, позволяющее атомарно обновлять указанные нестатические поля volatile long указанных классов. Предоставляет часть функциональности класса VarHandle, который рекомендуется использовать вместо него. |
| AtomicMarkableReference<V> | Объект AtomicMarkableReference хранит ссылку на объект вместе с битом метки, которые можно атомарно обновлять. |
| AtomicReference<V> | Ссылка на объект, которую можно атомарно обновлять. |
| AtomicReferenceArray<E> | Массив ссылок на объекты, элементы которого можно атомарно обновлять. |
|
AtomicReferenceFieldUpdater<T, |
Основанное на рефлексии служебное средство, позволяющее атомарно обновлять указанные нестатические поля ссылок volatile указанных классов. Предоставляет часть функциональности класса VarHandle, который рекомендуется использовать вместо него. |
| 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.