Spec-Zone.ru › OpenJDK 21

Пакет 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 связывает целочисленное значение со ссылкой. Это может использоваться, например, для представления номеров версий, соответствующих сериям обновлений.

Since:
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 сумму.

© 1993, 2023, 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/21/docs/api/java.base/java/util/concurrent/atomic/package-summary.html

Spec-Zone.ru

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