|
Spec-Zone .ru
спецификации, руководства, описания, API
|
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 на том же самом updater.
| Модификатор | Конструктор и Описание |
|---|---|
protected |
AtomicReferenceFieldUpdater()
Защищенный пустой конструктор для использования подклассами.
|
| Модификатор и Тип | Метод и Описание |
|---|---|
abstract boolean |
compareAndSet(T obj, V expect, V update)
Атомарно устанавливает поле данного объекта, которым управляет этот updater к данному обновленному значению если текущая стоимость
== математическое ожидание. |
abstract V |
get(T obj)
Содержали текущую стоимость в поле данного объекта, которым управляет этот updater.
|
V |
getAndSet(T obj, V newValue)
Атомарно устанавливает поле данного объекта, которым управляет этот 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 к данному обновленному значению.
|
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 - класс удерживающих позиции объектов.vclass - класс поляfieldName - имя поля, которое будет обновлено.IllegalArgumentException - если поле не является энергозависимым ссылочным типом.RuntimeException - с вложенным основанным на отражении исключением, если класс не содержит поле или является неправильным типом.public 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 - Объект, чье поле, чтобы добраться
Для дальнейшей ссылки API и документации разработчика, см. . Та документация содержит более подробные, предназначенные разработчиком описания, с концептуальными краткими обзорами, определениями сроков, обходных решений, и рабочих примеров кода.
Авторское право © 1993, 2011, Oracle и/или его филиалы. Все права защищены.