Spec-Zone .ru
спецификации, руководства, описания, API
|
T
- Тип объекта, содержащего обновляемое полеV
- Тип поляpublic abstract class AtomicReferenceFieldUpdater<T,V> extends Object
volatile
ссылочные поля определяемых классов. Этот class разрабатывается для использования в атомарных структурах данных, в которых несколько ссылочных полей того же самого узла независимо подвергаются атомарным обновлениям. Например, древовидный узел мог бы быть объявлен как
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
метод в этом class более слаб чем в других атомарных классах. Поскольку этот class не может гарантировать, что все использование поля является соответствующим в целях атомарного доступа, это может гарантировать атомарность только относительно других вызовов compareAndSet
и set
на том же самом updater.
Модификатор | Конструктор и Описание |
---|---|
protected |
AtomicReferenceFieldUpdater()
Защищенный пустой конструктор для использования подклассами.
|
Модификатор и Тип | Метод и Описание |
---|---|
V |
accumulateAndGet(T obj, V x, BinaryOperator<V> accumulatorFunction)
Атомарно обновляет поле данного объекта, которым управляет этот updater с результатами применения заданной функции к току и данным значениям, возвращая обновленное значение.
|
abstract boolean |
compareAndSet(T obj, V expect, V update)
Атомарно устанавливает поле данного объекта, которым управляет этот updater к данному обновленному значению если текущая стоимость
== математическое ожидание. |
abstract V |
get(T obj)
Содержали текущую стоимость в поле данного объекта, которым управляет этот updater.
|
V |
getAndAccumulate(T obj, V x, BinaryOperator<V> accumulatorFunction)
Атомарно обновляет поле данного объекта, которым управляет этот updater с результатами применения заданной функции к току и данным значениям, возвращая предыдущее значение.
|
V |
getAndSet(T obj, V newValue)
Атомарно устанавливает поле данного объекта, которым управляет этот updater к данному значению, и возвращает старое значение.
|
V |
getAndUpdate(T obj, UnaryOperator<V> updateFunction)
Атомарно обновляет поле данного объекта, которым управляет этот updater с результатами применения заданной функции, возвращая предыдущее значение.
|
abstract void |
lazySet(T obj, V newValue)
В конечном счете устанавливает поле данного объекта, которым управляет этот updater к данному обновленному значению.
|
static <U,W> AtomicReferenceFieldUpdater<U,W> |
newUpdater(Class<U> tclass, Class<W> vclass, String fieldName)
Создает и возвращает updater для объектов с данным полем.
|
abstract void |
set(T obj, V newValue)
Устанавливает поле данного объекта, которым управляет этот updater к данному обновленному значению.
|
V |
updateAndGet(T obj, UnaryOperator<V> updateFunction)
Атомарно обновляет поле данного объекта, которым управляет этот updater с результатами применения заданной функции, возвращая обновленное значение.
|
abstract boolean |
weakCompareAndSet(T obj, V expect, V update)
Атомарно устанавливает поле данного объекта, которым управляет этот updater к данному обновленному значению если текущая стоимость
== математическое ожидание. |
protected AtomicReferenceFieldUpdater()
public static <U,W> AtomicReferenceFieldUpdater<U,W> newUpdater(Class<U> tclass, Class<W> vclass, String fieldName)
tclass
- class удерживающих позиции объектов.vclass
- class поляfieldName
- имя поля, которое будет обновлено.IllegalArgumentException
- если поле не является энергозависимым ссылочным типом.RuntimeException
- с вложенным основанным на отражении исключением, если class не содержит поле или является неправильным типом, или поле недоступно вызывающей стороне согласно управлению доступом языка Javapublic abstract boolean compareAndSet(T obj, V expect, V update)
==
математическое ожидание. Этот метод, как гарантируют, будет атомарным относительно других звонков compareAndSet
и set
, но не обязательно относительно других изменений в поле.obj
- Объект, чье поле, чтобы условно установитьexpect
- математическое ожиданиеupdate
- новое значениеpublic abstract boolean weakCompareAndSet(T obj, V expect, V update)
==
математическое ожидание. Этот метод, как гарантируют, будет атомарным относительно других звонков compareAndSet
и set
, но не обязательно относительно других изменений в поле. Может перестать работать побочно и не обеспечивает гарантии упорядочивания, так только редко соответствующая альтернатива compareAndSet
.
obj
- Объект, чье поле, чтобы условно установитьexpect
- математическое ожиданиеupdate
- новое значениеpublic abstract void set(T obj, V newValue)
compareAndSet
.obj
- Объект, чье поле, чтобы установитьnewValue
- новое значениеpublic abstract void lazySet(T obj, V newValue)
obj
- Объект, чье поле, чтобы установитьnewValue
- новое значениеpublic abstract V get(T obj)
obj
- Объект, чье поле, чтобы добратьсяpublic V getAndSet(T obj, V newValue)
obj
- Объект, чье поле, чтобы добраться и установитьnewValue
- новое значениеpublic final V getAndUpdate(T obj, UnaryOperator<V> updateFunction)
obj
- Объект, чье поле, чтобы добраться и установитьupdateFunction
- функция без побочных эффектовpublic final V updateAndGet(T obj, UnaryOperator<V> updateFunction)
obj
- Объект, чье поле, чтобы добраться и установитьupdateFunction
- функция без побочных эффектовpublic final V getAndAccumulate(T obj, V x, BinaryOperator<V> accumulatorFunction)
obj
- Объект, чье поле, чтобы добраться и установитьx
- значение обновленияaccumulatorFunction
- функция без побочных эффектов двух параметровpublic final V accumulateAndGet(T obj, V x, BinaryOperator<V> accumulatorFunction)
obj
- Объект, чье поле, чтобы добраться и установитьx
- значение обновленияaccumulatorFunction
- функция без побочных эффектов двух параметров
Для дальнейшей ссылки API и документации разработчика, см. Java Документация SE. Та документация содержит более подробные, предназначенные разработчиком описания, с концептуальными краткими обзорами, определениями сроков, обходных решений, и рабочих примеров кода.
Авторское право © 1993, 2013, Oracle и/или его филиалы. Все права защищены.
Проект сборка-b92