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 и/или его филиалы. Все права защищены.