Spec-Zone.ru › OpenJDK 27

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

Сообщить об ошибке или предложить улучшение
Дополнительную справочную информацию по API и документацию для разработчиков см. в разделе Документация Java SE, содержащем более подробные описания для разработчиков, обзоры концепций, определения терминов, обходные решения и примеры работающего кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или её аффилированных лиц в США и других странах.
Авторское право © 1993, 2026, 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.

Spec-Zone.ru

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