Spec-Zone.ru › OpenJDK 25

Пакет java.util.concurrent.atomic

package java.util.concurrent.atomic
Небольшой набор классов, поддерживающих потокобезопасное программирование без блокировок с отдельными переменными. Экземпляры классов 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
Пакет Описание
java.util.concurrent
Служебные классы, часто полезные при параллельном программировании.
java.util.concurrent.locks
Интерфейсы и классы, предоставляющие инфраструктуру для блокировок и ожидания условий, отличную от встроенной синхронизации и мониторов.
Класс Описание
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,V>
Основанное на рефлексии средство, позволяющее атомарно обновлять заданные поля ссылочного типа volatile указанных классов.
AtomicStampedReference<V>
Экземпляр AtomicStampedReference хранит ссылку на объект вместе с целочисленной «меткой», которые можно атомарно обновлять.
DoubleAccumulator
Одна или несколько переменных, совместно хранящих текущее значение double, обновляемое с помощью заданной функции.
DoubleAdder
Одна или несколько переменных, совместно хранящих сумму double, изначально равную нулю.
LongAccumulator
Одна или несколько переменных, совместно хранящих текущее значение long, обновляемое с помощью заданной функции.
LongAdder
Одна или несколько переменных, совместно хранящих сумму long, изначально равную нулю.

Сообщить об ошибке или предложить улучшение
Дополнительную справочную информацию по API и документацию для разработчиков см. в документации Java SE, содержащей более подробные описания для разработчиков, обзоры концепций, определения терминов, обходные решения и рабочие примеры кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или её аффилированных лиц в США и других странах.
Авторские права © 1993, 2025, Oracle и/или её аффилированные лица, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API