Пакет 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 связывает целое значение со ссылкой. Это может быть использовано, например, для представления номеров версий, соответствующих сериям обновлений.
- Since:
- 1.5
| Класс | Описание |
|---|---|
| AtomicBoolean | Логическое значение, которое может быть обновлено атомарно. |
| AtomicInteger | Целочисленное значение, которое может быть обновлено атомарно. |
| AtomicIntegerArray | Массив целых чисел, в котором элементы могут быть обновлены атомарно. |
| AtomicIntegerFieldUpdater<T> | Утилита, основанная на рефлексии, которая позволяет атомарно обновлять указанные volatile int поля указанных классов. |
| AtomicLong | Длинное целое значение, которое может быть обновлено атомарно. |
| AtomicLongArray | Массив длинных целых чисел, в котором элементы могут быть обновлены атомарно. |
| AtomicLongFieldUpdater<T> | Утилита, основанная на рефлексии, которая позволяет атомарно обновлять указанные volatile long поля указанных классов. |
| AtomicMarkableReference<V> | Ссылка, которая хранит объект и маркер-флаг, который может быть обновлен атомарно. |
| AtomicReference<V> | Ссылка на объект, которая может быть обновлена атомарно. |
| AtomicReferenceArray<E> | Массив ссылок на объекты, в котором элементы могут быть обновлены атомарно. |
|
AtomicReferenceFieldUpdater<T, |
Утилита, основанная на рефлексии, которая позволяет атомарно обновлять указанные volatile ссылки на поля указанных классов. |
| AtomicStampedReference<V> | Ссылка, которая хранит объект и целочисленный "штамп", который может быть обновлен атомарно. |
| DoubleAccumulator | Одна или несколько переменных, которые вместе поддерживают текущее значение double обновленное с помощью предоставленной функции. |
| DoubleAdder | Одна или несколько переменных, которые вместе поддерживают начальную сумму double равную нулю. |
| LongAccumulator | Одна или несколько переменных, которые вместе поддерживают текущее значение long обновленное с помощью предоставленной функции. |
| LongAdder | Одна или несколько переменных, которые вместе поддерживают начальную сумму long равную нулю. |
© 1993, 2021, 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/17/docs/api/java.base/java/util/concurrent/atomic/package-summary.html