Класс AtomicLongFieldUpdater<T>
- Type Parameters:
-
T- Тип объекта, содержащего обновляемое поле
public abstract class AtomicLongFieldUpdater<T> extends Object
volatile long определённых классов. Этот класс предназначен для использования в атомных структурах данных, в которых несколько полей одного узла независимо подвержены атомным обновлениям. Обратите внимание, что гарантии метода compareAndSet в этом классе слабее, чем в других атомных классах. Поскольку этот класс не может гарантировать, что все использования поля подходят для атомного доступа, он может гарантировать атомарность только по отношению к другим вызовам compareAndSet и set на том же обновлятеле.
Объекты-аргументы для параметров типа T , которые не являются экземплярами класса, переданного в newUpdater(java.lang.Class<U>, java.lang.String), приведут к тому, что будет брошено исключение ClassCastException.
- Since:
- 1.5
Краткое описание конструкторов
| Модификатор | Конструктор | Описание |
|---|---|---|
protected |
Защищённый конструктор без действий для использования подклассами. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
final long |
accumulateAndGet |
Атомно обновляет (с эффектами памяти, как указано в VarHandle.compareAndSet(java.lang.Object...)) поле заданного объекта, управляемого этим обновлятелем, с результатами применения заданной функции к текущему и заданному значениям, возвращая обновлённое значение. |
long |
addAndGet |
Атомно добавляет заданное значение к текущему значению поля заданного объекта, управляемого этим обновлятелем. |
abstract boolean |
compareAndSet |
Атомно устанавливает поле заданного объекта, управляемого этим обновлятелем, в заданное обновлённое значение, если текущее значение == ожидаемого значения. |
long |
decrementAndGet |
Атомно уменьшает на единицу текущее значение поля заданного объекта, управляемого этим обновлятелем. |
abstract long |
get |
Возвращает текущее значение, хранящееся в поле заданного объекта, управляемого этим обновлятелем. |
final long |
getAndAccumulate |
Атомно обновляет (с эффектами памяти, как указано в VarHandle.compareAndSet(java.lang.Object...)) поле заданного объекта, управляемого этим обновлятелем, с результатами применения заданной функции к текущему и заданному значениям, возвращая предыдущее значение. |
long |
getAndAdd |
Атомно добавляет заданное значение к текущему значению поля заданного объекта, управляемого этим обновлятелем. |
long |
getAndDecrement |
Атомно уменьшает на единицу текущее значение поля заданного объекта, управляемого этим обновлятелем. |
long |
getAndIncrement |
Атомно увеличивает на единицу текущее значение поля заданного объекта, управляемого этим обновлятелем. |
long |
getAndSet |
Атомно устанавливает поле заданного объекта, управляемого этим обновлятелем, в заданное значение и возвращает старое значение. |
final long |
getAndUpdate |
Атомно обновляет (с эффектами памяти, как указано в VarHandle.compareAndSet(java.lang.Object...)) поле заданного объекта, управляемого этим обновлятелем, с результатами применения заданной функции, возвращая предыдущее значение. |
long |
incrementAndGet |
Атомно увеличивает на единицу текущее значение поля заданного объекта, управляемого этим обновлятелем. |
abstract void |
lazySet |
В конечном итоге устанавливает поле заданного объекта, управляемого этим обновлятелем, в заданное обновлённое значение. |
static <U> AtomicLongFieldUpdater<U> |
newUpdater |
Создаёт и возвращает обновлятель для объектов с заданным полем. |
abstract void |
set |
Устанавливает поле заданного объекта, управляемого этим обновлятелем, в заданное обновлённое значение. |
final long |
updateAndGet |
Атомно обновляет (с эффектами памяти, как указано в VarHandle.compareAndSet(java.lang.Object...)) поле заданного объекта, управляемого этим обновлятелем, с результатами применения заданной функции, возвращая обновлённое значение. |
abstract boolean |
weakCompareAndSet |
Атомно устанавливает поле заданного объекта, управляемого этим обновлятелем, в заданное обновлённое значение, если текущее значение == ожидаемого значения. |
Подробное описание конструкторов
AtomicLongFieldUpdater
protected AtomicLongFieldUpdater()
Подробное описание методов
newUpdater
public static <U> AtomicLongFieldUpdater<U> newUpdater(Class<U> tclass, String fieldName)
- Параметры типа:
-
U- тип экземпляров tclass - Параметры:
-
tclass- класс объектов, содержащих поле -
fieldName- имя поля, которое должно быть обновлено - Возвращает:
- апдейтер
- Исключения:
-
IllegalArgumentException- если поле не имеет тип volatile long -
RuntimeException- с вложенным исключением на основе рефлексии, если класс не содержит поле или имеет неправильный тип, или поле недоступно для вызывающего кода в соответствии с правилами доступа Java
compareAndSet
public abstract boolean compareAndSet(T obj, long expect, long update)
== ожидаемое значение. Этот метод гарантированно атомен относительно других вызовов compareAndSet и set, но не обязательно относительно других изменений в поле.- Параметры:
-
obj- объект, поле которого нужно условно установить -
expect- ожидаемое значение -
update- новое значение - Возвращает:
-
trueв случае успеха
weakCompareAndSet
public abstract boolean weakCompareAndSet(T obj, long expect, long update)
== ожидаемое значение. Этот метод гарантированно атомен относительно других вызовов compareAndSet и set, но не обязательно относительно других изменений в поле. Эта операция может случайным образом завершиться неудачей и не предоставляет гарантий упорядочивания, поэтому она лишь в редких случаях является подходящей альтернативой compareAndSet.
- Параметры:
-
obj- объект, поле которого нужно условно установить -
expect- ожидаемое значение -
update- новое значение - Возвращает:
-
trueв случае успеха
set
public abstract void set(T obj, long newValue)
compareAndSet. - Параметры:
-
obj- объект, поле которого нужно установить -
newValue- новое значение
lazySet
public abstract void lazySet(T obj, long newValue)
- Параметры:
-
obj- объект, поле которого нужно установить -
newValue- новое значение - С:
- 1.6
get
public abstract long get(T obj)
- Параметры:
-
obj- объект, поле которого нужно получить - Возвращает:
- текущее значение
getAndSet
public long getAndSet(T obj, long newValue)
- Параметры:
-
obj- объект, поле которого нужно получить и установить -
newValue- новое значение - Возвращает:
- предыдущее значение
getAndIncrement
public long getAndIncrement(T obj)
- Параметры:
-
obj- объект, поле которого нужно получить и установить - Возвращает:
- предыдущее значение
getAndDecrement
public long getAndDecrement(T obj)
- Параметры:
-
obj- объект, поле которого нужно получить и установить - Возвращает:
- предыдущее значение
getAndAdd
public long getAndAdd(T obj, long delta)
- Параметры:
-
obj- объект, поле которого нужно получить и установить -
delta- значение для прибавления - Возвращает:
- предыдущее значение
incrementAndGet
public long incrementAndGet(T obj)
- Параметры:
-
obj- объект, поле которого нужно получить и установить - Возвращает:
- обновлённое значение
decrementAndGet
public long decrementAndGet(T obj)
- Параметры:
-
obj- объект, поле которого нужно получить и установить - Возвращает:
- обновлённое значение
addAndGet
public long addAndGet(T obj, long delta)
- Параметры:
-
obj- объект, поле которого нужно получить и установить -
delta- значение для прибавления - Возвращает:
- обновлённое значение
getAndUpdate
public final long getAndUpdate(T obj, LongUnaryOperator updateFunction)
VarHandle.compareAndSet(java.lang.Object...)) поле заданного объекта, управляемого этим апдейтером, результатом применения заданной функции, возвращая предыдущее значение. Функция должна быть без побочных эффектов, так как она может быть повторно применена, когда попытки обновления завершаются неудачей из-за конкуренции между потоками.- Параметры:
-
obj- объект, поле которого нужно получить и установить -
updateFunction- функция без побочных эффектов - Возвращает:
- предыдущее значение
- С:
- 1.8
updateAndGet
public final long updateAndGet(T obj, LongUnaryOperator updateFunction)
VarHandle.compareAndSet(java.lang.Object...)) поле заданного объекта, управляемого этим апдейтером, результатом применения заданной функции, возвращая обновлённое значение. Функция должна быть без побочных эффектов, так как она может быть повторно применена, когда попытки обновления завершаются неудачей из-за конкуренции между потоками.- Параметры:
-
obj- объект, поле которого нужно получить и установить -
updateFunction- функция без побочных эффектов - Возвращает:
- обновлённое значение
- С:
- 1.8
getAndAccumulate
public final long getAndAccumulate(T obj, long x, LongBinaryOperator accumulatorFunction)
VarHandle.compareAndSet(java.lang.Object...)) поле заданного объекта, управляемого этим апдейтером, результатом применения заданной функции к текущему и заданным значениям, возвращая предыдущее значение. Функция должна быть без побочных эффектов, так как она может быть повторно применена, когда попытки обновления завершаются неудачей из-за конкуренции между потоками. Функция применяется с текущим значением в качестве первого аргумента и заданным обновлением в качестве второго.- Параметры:
-
obj- объект, поле которого нужно получить и установить -
x- значение обновления -
accumulatorFunction- функция без побочных эффектов от двух аргументов - Возвращает:
- предыдущее значение
- С:
- 1.8
accumulateAndGet
public final long accumulateAndGet(T obj, long x, LongBinaryOperator accumulatorFunction)
VarHandle.compareAndSet(java.lang.Object...)) поле данного объекта, управляемого этим обновляющим элементом, результатом применения заданной функции к текущему и заданному значениям, возвращая обновлённое значение. Функция должна быть без побочных эффектов, так как она может быть повторно применена, если попытки обновления терпят неудачу из-за конкуренции между потоками. Функция применяется с текущим значением в качестве первого аргумента и заданным обновлением в качестве второго аргумента.- Параметры:
-
obj- Объект, поле которого нужно получить и установить -
x- значение обновления -
accumulatorFunction- функция без побочных эффектов от двух аргументов - Возвращает:
- обновлённое значение
- С:
- 1.8
© 1993, 2021, 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/17/docs/api/java.base/java/util/concurrent/atomic/AtomicLongFieldUpdater.html