Класс 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
Краткое описание конструкторов
| Модификатор | Конструктор | Описание |
|---|---|---|
protected |
Защищенный пустой конструктор для использования подклассами. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
final V |
accumulateAndGet |
Атомарно обновляет поле указанного объекта, управляемое этим средством обновления, результатом применения заданной функции к текущему и заданному значениям (с эффектами памяти, указанными в VarHandle.compareAndSet(Object...)) и возвращает обновленное значение. |
abstract boolean |
compareAndSet |
Атомарно устанавливает поле указанного объекта, управляемое этим средством обновления, в заданное обновленное значение, если текущее значение == ожидаемому значению. |
abstract V |
get |
Возвращает текущее значение поля указанного объекта, управляемого этим средством обновления. |
final V |
getAndAccumulate |
Атомарно обновляет поле указанного объекта, управляемое этим средством обновления, результатом применения заданной функции к текущему и заданному значениям (с эффектами памяти, указанными в VarHandle.compareAndSet(Object...)) и возвращает предыдущее значение. |
V |
getAndSet |
Атомарно устанавливает поле указанного объекта, управляемое этим средством обновления, в заданное значение и возвращает старое значение. |
final V |
getAndUpdate |
Атомарно обновляет поле указанного объекта, управляемое этим средством обновления, результатом применения заданной функции (с эффектами памяти, указанными в VarHandle.compareAndSet(Object...)) и возвращает предыдущее значение. |
abstract void |
lazySet |
В конечном итоге устанавливает поле указанного объекта, управляемое этим средством обновления, в заданное обновленное значение. |
static <U, |
newUpdater |
Создает и возвращает средство обновления для объектов с заданным полем. |
abstract void |
set |
Устанавливает поле указанного объекта, управляемое этим средством обновления, в заданное обновленное значение. |
final V |
updateAndGet |
Атомарно обновляет поле указанного объекта, управляемое этим средством обновления, результатом применения заданной функции (с эффектами памяти, указанными в VarHandle.compareAndSet(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(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
© 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