Spec-Zone.ru › OpenJDK 17

Класс 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(java.lang.Class<U>, java.lang.Class<W>, java.lang.String), приведут к тому, что будет брошено исключение ClassCastException.

С тех пор:
1.5

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

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

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

Модификатор и тип Метод Описание
final V accumulateAndGet(T obj, V x, BinaryOperator<V> accumulatorFunction)
Атомно обновляет (с эффектами памяти, как указано в VarHandle.compareAndSet(java.lang.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(java.lang.Object...)) поле заданного объекта, управляемого этим обновлятелем, с результатами применения заданной функции к текущему и заданным значениям, возвращая предыдущее значение.
V getAndSet(T obj, V newValue)
Атомно устанавливает поле заданного объекта, управляемого этим обновлятелем, в заданное значение и возвращает старое значение.
final V getAndUpdate(T obj, UnaryOperator<V> updateFunction)
Атомно обновляет (с эффектами памяти, как указано в VarHandle.compareAndSet(java.lang.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(java.lang.Object...)) поле заданного объекта, управляемого этим обновлятелем, с результатами применения заданной функции, возвращая обновленное значение.
abstract boolean weakCompareAndSet(T obj, V expect, V update)
Атомно устанавливает поле заданного объекта, управляемого этим обновлятелем, в заданное обновленное значение, если текущее значение == ожидаемое значение.

Методы, объявленные в классе java.lang.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(java.lang.Object...)) поле данного объекта, управляемого этим обновляющим элементом, результатом применения данного функционального интерфейса, возвращая предыдущее значение. Функция должна быть без побочных эффектов, так как она может быть повторно применена, когда попытки обновления терпят неудачу из-за конкуренции между потоками.
Параметры:
obj - Объект, поле которого необходимо получить и установить
updateFunction - функция без побочных эффектов
Возвращает:
предыдущее значение
С:
1.8

updateAndGet

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

getAndAccumulate

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

accumulateAndGet

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

© 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/AtomicReferenceFieldUpdater.html

Spec-Zone.ru

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