Spec-Zone.ru › OpenJDK 25

Класс AtomicReferenceFieldUpdater<T,V>

java.lang.Object
java.util.concurrent.atomic.AtomicReferenceFieldUpdater<T,V>
Параметры типа:
T — тип объекта, содержащего обновляемое поле
V — тип поля
public abstract class AtomicReferenceFieldUpdater<T,V> extends Object
Утилита на основе рефлексии, которая позволяет выполнять атомарные обновления указанных ссылочных полей volatile указанных классов. Этот класс предназначен для использования в атомарных структурах данных, в которых несколько ссылочных полей одного узла независимо подвергаются атомарным обновлениям. Например, узел дерева может быть объявлен как
class Node {
  private volatile Node left, right;

  private static final AtomicReferenceFieldUpdater<Node, Node> leftUpdater =
    AtomicReferenceFieldUpdater.newUpdater(Node.class, Node.class, "left");
  private static final AtomicReferenceFieldUpdater<Node, Node> rightUpdater =
    AtomicReferenceFieldUpdater.newUpdater(Node.class, Node.class, "right");

  Node getLeft() { return left; }
  boolean compareAndSetLeft(Node expect, Node update) {
    return leftUpdater.compareAndSet(this, expect, update);
  }
  // ... and so on
}

Обратите внимание, что гарантии метода compareAndSet в этом классе слабее, чем в других атомарных классах. Поскольку этот класс не может гарантировать, что все обращения к полю подходят для атомарного доступа, он может гарантировать атомарность только относительно других вызовов compareAndSet и set для того же средства обновления.

Передача в качестве аргументов объектов типа T, не являющихся экземплярами класса, переданного в newUpdater(Class, Class, String), приведет к выбрасыванию ClassCastException.

Начиная с версии:
1.5

Краткое описание конструкторов

AtomicReferenceFieldUpdater()
Модификатор Конструктор Описание
protected
Защищенный пустой конструктор для использования подклассами.

Краткое описание методов

Модификатор и тип Метод Описание
final V accumulateAndGet(T obj, V x, BinaryOperator<V> accumulatorFunction)
Атомарно обновляет поле указанного объекта, управляемое этим средством обновления, результатом применения заданной функции к текущему и заданному значениям (с эффектами памяти, указанными в VarHandle.compareAndSet(Object...)) и возвращает обновленное значение.
abstract boolean compareAndSet(T obj, V expect, V update)
Атомарно устанавливает поле указанного объекта, управляемое этим средством обновления, в заданное обновленное значение, если текущее значение == ожидаемому значению.
abstract V get(T obj)
Возвращает текущее значение поля указанного объекта, управляемого этим средством обновления.
final V getAndAccumulate(T obj, V x, BinaryOperator<V> accumulatorFunction)
Атомарно обновляет поле указанного объекта, управляемое этим средством обновления, результатом применения заданной функции к текущему и заданному значениям (с эффектами памяти, указанными в VarHandle.compareAndSet(Object...)) и возвращает предыдущее значение.
V getAndSet(T obj, V newValue)
Атомарно устанавливает поле указанного объекта, управляемое этим средством обновления, в заданное значение и возвращает старое значение.
final V getAndUpdate(T obj, UnaryOperator<V> updateFunction)
Атомарно обновляет поле указанного объекта, управляемое этим средством обновления, результатом применения заданной функции (с эффектами памяти, указанными в VarHandle.compareAndSet(Object...)) и возвращает предыдущее значение.
abstract void lazySet(T obj, V newValue)
В конечном итоге устанавливает поле указанного объекта, управляемое этим средством обновления, в заданное обновленное значение.
static <U,W> AtomicReferenceFieldUpdater<U,W> newUpdater(Class<U> tclass, Class<W> vclass, String fieldName)
Создает и возвращает средство обновления для объектов с заданным полем.
abstract void set(T obj, V newValue)
Устанавливает поле указанного объекта, управляемое этим средством обновления, в заданное обновленное значение.
final V updateAndGet(T obj, UnaryOperator<V> updateFunction)
Атомарно обновляет поле указанного объекта, управляемое этим средством обновления, результатом применения заданной функции (с эффектами памяти, указанными в VarHandle.compareAndSet(Object...)) и возвращает обновленное значение.
abstract boolean weakCompareAndSet(T obj, V expect, V update)
Атомарно устанавливает поле указанного объекта, управляемое этим средством обновления, в заданное обновленное значение, если текущее значение == ожидаемому значению.

Методы, объявленные в классе Object

clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

Подробное описание конструкторов

AtomicReferenceFieldUpdater

protected AtomicReferenceFieldUpdater()
Защищенный пустой конструктор для использования подклассами.

Подробное описание методов

newUpdater

public static <U,W> AtomicReferenceFieldUpdater<U,W> newUpdater(Class<U> tclass, Class<W> vclass, String fieldName)
Создает и возвращает средство обновления для объектов с заданным полем. Аргументы типа Class необходимы для проверки соответствия типов рефлексии и обобщенных типов.
Параметры типа:
U — тип экземпляров tclass
W — тип экземпляров vclass
Параметры:
tclass — класс объектов, содержащих поле
vclass — класс поля
fieldName — имя обновляемого поля
Возвращает:
средство обновления
Исключения:
ClassCastException — если поле имеет неверный тип
IllegalArgumentException — если поле не является volatile
RuntimeException с вложенным исключением, связанным с рефлексией, если класс не содержит поле или имеет неверный тип, либо если поле недоступно вызывающему коду согласно правилам контроля доступа языка Java

compareAndSet

public abstract boolean compareAndSet(T obj, V expect, V update)
Атомарно устанавливает поле указанного объекта, управляемое этим средством обновления, в заданное обновленное значение, если текущее значение == ожидаемому значению. Гарантируется атомарность этого метода относительно других вызовов compareAndSet и set, но не обязательно относительно других изменений поля.
Параметры:
obj — объект, поле которого нужно условно установить
expect — ожидаемое значение
update — новое значение
Возвращает:
true при успешном выполнении

weakCompareAndSet

public abstract boolean weakCompareAndSet(T obj, V expect, V update)
Атомарно устанавливает поле указанного объекта, управляемое этим средством обновления, в заданное обновленное значение, если текущее значение == ожидаемому значению. Гарантируется атомарность этого метода относительно других вызовов compareAndSet и set, но не обязательно относительно других изменений поля.

Эта операция может завершиться неудачей без причины и не предоставляет гарантий упорядочения, поэтому лишь в редких случаях является подходящей альтернативой compareAndSet.

Параметры:
obj — объект, поле которого нужно условно установить
expect — ожидаемое значение
update — новое значение
Возвращает:
true при успешном выполнении

set

public abstract void set(T obj, V newValue)
Устанавливает поле указанного объекта, управляемое этим средством обновления, в заданное обновленное значение. Гарантируется, что эта операция действует как volatile-запись относительно последующих вызовов compareAndSet.
Параметры:
obj — объект, поле которого нужно установить
newValue — новое значение

lazySet

public abstract void lazySet(T obj, V newValue)
В конечном итоге устанавливает поле указанного объекта, управляемое этим средством обновления, в заданное обновленное значение.
Параметры:
obj — объект, поле которого нужно установить
newValue — новое значение
Начиная с версии:
1.6

get

public abstract V get(T obj)
Возвращает текущее значение поля указанного объекта, управляемого этим средством обновления.
Параметры:
obj — объект, поле которого нужно получить
Возвращает:
текущее значение

getAndSet

public V getAndSet(T obj, V newValue)
Атомарно устанавливает поле указанного объекта, управляемое этим средством обновления, в заданное значение и возвращает старое значение.
Параметры:
obj — объект, поле которого нужно получить и установить
newValue — новое значение
Возвращает:
предыдущее значение

getAndUpdate

public final V getAndUpdate(T obj, UnaryOperator<V> updateFunction)
Атомарно обновляет поле указанного объекта, управляемое этим средством обновления, результатом применения заданной функции (с эффектами памяти, указанными в VarHandle.compareAndSet(Object...)) и возвращает предыдущее значение. Функция не должна иметь побочных эффектов, поскольку она может быть применена повторно, если попытки обновления завершаются неудачей из-за конкуренции между потоками.
Параметры:
obj — объект, поле которого нужно получить и установить
updateFunction — функция без побочных эффектов
Возвращает:
предыдущее значение
Начиная с версии:
1.8

updateAndGet

public final V updateAndGet(T obj, UnaryOperator<V> updateFunction)
Атомарно обновляет поле указанного объекта, управляемое этим средством обновления, результатом применения заданной функции (с эффектами памяти, указанными в VarHandle.compareAndSet(Object...)) и возвращает обновленное значение. Функция не должна иметь побочных эффектов, поскольку она может быть применена повторно, если попытки обновления завершаются неудачей из-за конкуренции между потоками.
Параметры:
obj — объект, поле которого нужно получить и установить
updateFunction — функция без побочных эффектов
Возвращает:
обновленное значение
Начиная с версии:
1.8

getAndAccumulate

public final V getAndAccumulate(T obj, V x, BinaryOperator<V> accumulatorFunction)
Атомарно обновляет поле указанного объекта, управляемое этим средством обновления, результатом применения заданной функции к текущему и заданному значениям (с эффектами памяти, указанными в VarHandle.compareAndSet(Object...)) и возвращает предыдущее значение. Функция не должна иметь побочных эффектов, поскольку она может быть применена повторно, если попытки обновления завершаются неудачей из-за конкуренции между потоками. Функция применяется, причем текущее значение передается в качестве первого аргумента, а заданное обновление — в качестве второго.
Параметры:
obj — объект, поле которого нужно получить и установить
x — значение обновления
accumulatorFunction — функция двух аргументов без побочных эффектов
Возвращает:
предыдущее значение
Начиная с версии:
1.8

accumulateAndGet

public final V accumulateAndGet(T obj, V x, BinaryOperator<V> accumulatorFunction)
Атомарно обновляет поле указанного объекта, управляемое этим средством обновления, результатом применения заданной функции к текущему и заданному значениям (с эффектами памяти, указанными в VarHandle.compareAndSet(Object...)) и возвращает обновленное значение. Функция не должна иметь побочных эффектов, поскольку она может быть применена повторно, если попытки обновления завершаются неудачей из-за конкуренции между потоками. Функция применяется, причем текущее значение передается в качестве первого аргумента, а заданное обновление — в качестве второго.
Параметры:
obj — объект, поле которого нужно получить и установить
x — значение обновления
accumulatorFunction — функция двух аргументов без побочных эффектов
Возвращает:
обновленное значение
Начиная с версии:
1.8

Сообщить об ошибке или предложить улучшение
Дополнительные справочные материалы по 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/AtomicReferenceFieldUpdater.html

Spec-Zone.ru

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