Spec-Zone.ru › OpenJDK 8

Класс AtomicReferenceFieldUpdater<T,V>

  • java.lang.Object
    • java.util.concurrent.atomic.AtomicReferenceFieldUpdater<T,V>
Type Parameters:
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 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 для одного и того же апдейтера.

Since:
1.5

Конструкторы

Модификатор Конструктор и описание
protected AtomicReferenceFieldUpdater()

Защищенный конструктор без действий, используемый подклассами.

Методы

Модификатор и тип Метод и описание
V accumulateAndGet(T obj, V x, BinaryOperator<V> accumulatorFunction)

Атомарно обновляет поле заданного объекта, управляемого этим апдейтером, результатом применения заданной функции к текущему и заданным значениям, возвращая обновлённое значение.

abstract boolean compareAndSet(T obj, V expect, V update)

Атомарно устанавливает поле заданного объекта, управляемого этим апдейтером, в заданное обновленное значение, если текущее значение == ожидаемое значение.

abstract V get(T obj)

Получает текущее значение, хранящееся в поле заданного объекта, управляемого этим апдейтером.

V getAndAccumulate(T obj, V x, BinaryOperator<V> accumulatorFunction)

Атомарно обновляет поле заданного объекта, управляемого этим апдейтером, результатом применения заданной функции к текущему и заданным значениям, возвращая предыдущее значение.

V getAndSet(T obj, V newValue)

Атомарно устанавливает поле заданного объекта, управляемого этим апдейтером, в заданное значение и возвращает старое значение.

V getAndUpdate(T obj, UnaryOperator<V> updateFunction)

Атомарно обновляет поле заданного объекта, управляемого этим апдейтером, результатом применения заданной функции, возвращая предыдущее значение.

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)

Устанавливает поле заданного объекта, управляемого этим апдейтером, в заданное обновленное значение.

V updateAndGet(T obj, UnaryOperator<V> updateFunction)

Атомарно обновляет поле заданного объекта, управляемого этим апдейтером, результатом применения заданной функции, возвращая обновленное значение.

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)

Атомарно обновляет поле заданного объекта, управляемого этим обновлятелем, с результатами применения заданной функции, возвращая предыдущее значение. Функция не должна иметь побочных эффектов, так как она может быть повторно применена, когда попытки обновления завершаются неудачей из-за конкуренции между потоками.

Параметры:
obj - объект, чьё поле получить и установить
updateFunction - функция без побочных эффектов
Возвращает:
предыдущее значение
С:
1.8

updateAndGet

public final V updateAndGet(T obj,
                            UnaryOperator<V> updateFunction)

Атомарно обновляет поле заданного объекта, управляемого этим обновлятелем, с результатами применения заданной функции, возвращая обновлённое значение. Функция не должна иметь побочных эффектов, так как она может быть повторно применена, когда попытки обновления завершаются неудачей из-за конкуренции между потоками.

Параметры:
obj - объект, чьё поле получить и установить
updateFunction - функция без побочных эффектов
Возвращает:
обновлённое значение
С:
1.8

getAndAccumulate

public final V getAndAccumulate(T obj,
                                V x,
                                BinaryOperator<V> accumulatorFunction)

Атомарно обновляет поле заданного объекта, управляемого этим обновлятелем, с результатами применения заданной функции к текущему и заданному значениям, возвращая предыдущее значение. Функция не должна иметь побочных эффектов, так как она может быть повторно применена, когда попытки обновления завершаются неудачей из-за конкуренции между потоками. Функция применяется к текущему значению в качестве первого аргумента и заданному обновлению в качестве второго аргумента.

Параметры:
obj - объект, чьё поле получить и установить
x - значение обновления
accumulatorFunction - функция без побочных эффектов от двух аргументов
Возвращает:
предыдущее значение
С:
1.8

accumulateAndGet

public final V accumulateAndGet(T obj,
                                V x,
                                BinaryOperator<V> accumulatorFunction)

Атомарно обновляет поле заданного объекта, управляемого этим обновлятелем, с результатами применения заданной функции к текущему и заданному значениям, возвращая обновлённое значение. Функция не должна иметь побочных эффектов, так как она может быть повторно применена, когда попытки обновления завершаются неудачей из-за конкуренции между потоками. Функция применяется к текущему значению в качестве первого аргумента и заданному обновлению в качестве второго аргумента.

Параметры:
obj - объект, чьё поле получить и установить
x - значение обновления
accumulatorFunction - функция без побочных эффектов от двух аргументов
Возвращает:
обновлённое значение
С:
1.8

© 1993, 2020, 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.

Spec-Zone.ru

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