Класс 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
Краткое описание конструкторов
| Модификатор | Конструктор | Описание |
|---|---|---|
protected |
Защищённый конструктор без действий, используемый подклассами. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
final V |
accumulateAndGet |
Атомарно обновляет (с эффектами памяти, как указано в VarHandle.compareAndSet(java.lang.Object...)) поле заданного объекта, управляемого этим апдейтером, с результатом применения заданной функции к текущему и заданным значениям, возвращая обновленное значение. |
abstract boolean |
compareAndSet |
Атомарно устанавливает поле заданного объекта, управляемого этим апдейтером, в заданное обновлённое значение, если текущее значение == ожидаемое значение. |
abstract V |
get |
Возвращает текущее значение, хранящееся в поле заданного объекта, управляемого этим апдейтером. |
final V |
getAndAccumulate |
Атомарно обновляет (с эффектами памяти, как указано в VarHandle.compareAndSet(java.lang.Object...)) поле заданного объекта, управляемого этим апдейтером, с результатом применения заданной функции к текущему и заданным значениям, возвращая предыдущее значение. |
V |
getAndSet |
Атомарно устанавливает поле заданного объекта, управляемого этим апдейтером, в заданное значение и возвращает старое значение. |
final V |
getAndUpdate |
Атомарно обновляет (с эффектами памяти, как указано в VarHandle.compareAndSet(java.lang.Object...)) поле заданного объекта, управляемого этим апдейтером, с результатом применения заданной функции, возвращая предыдущее значение. |
abstract void |
lazySet |
В конечном итоге устанавливает поле заданного объекта, управляемого этим апдейтером, в заданное обновленное значение. |
static <U, |
newUpdater |
Создаёт и возвращает апдейтер для объектов с заданным полем. |
abstract void |
set |
Устанавливает поле заданного объекта, управляемого этим апдейтером, в заданное обновленное значение. |
final V |
updateAndGet |
Атомарно обновляет (с эффектами памяти, как указано в VarHandle.compareAndSet(java.lang.Object...)) поле заданного объекта, управляемого этим апдейтером, с результатом применения заданной функции, возвращая обновленное значение. |
abstract boolean |
weakCompareAndSet |
Атомарно устанавливает поле заданного объекта, управляемого этим апдейтером, в заданное обновлённое значение, если текущее значение == ожидаемое значение. |
Подробное описание конструкторов
AtomicReferenceFieldUpdater
protected AtomicReferenceFieldUpdater()
Подробное описание методов
newUpdater
public static <U,W> AtomicReferenceFieldUpdater<U,W> newUpdater(Class<U> tclass, Class<W> vclass, String fieldName)
- Параметры типа:
U- тип экземпляров tclassW- тип экземпляров 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)
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, 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://download.java.net/java/early_access/jdk24/docs/api/java.base/java/util/concurrent/atomic/AtomicReferenceFieldUpdater.html