Класс AtomicLongFieldUpdater<T>
- java.lang.Object
-
- java.util.concurrent.atomic.AtomicLongFieldUpdater<T>
- Параметры типа:
-
T- Тип объекта, содержащего обновляемое поле
public abstract class AtomicLongFieldUpdater<T> extends Object
Утилита на основе рефлексии, позволяющая выполнять атомные обновления указанных volatile long полей указанных классов. Этот класс предназначен для использования в атомных структурах данных, в которых несколько полей одного узла независимо подвергаются атомным обновлениям.
Обратите внимание, что гарантии метода compareAndSet в этом классе слабее, чем в других атомных классах. Поскольку этот класс не может гарантировать, что все использования поля подходят для целей атомного доступа, он может гарантировать атомность только по отношению к другим вызовам compareAndSet и set того же апдейтера.
Объектные аргументы для параметров типа T, которые не являются экземплярами класса, переданного в newUpdater(java.lang.Class<U>, java.lang.String), приведут к тому, что будет выброшено исключение ClassCastException.
- С тех пор:
- 1.5
Конструкторы
| Модификатор | Конструктор | Описание |
|---|---|---|
protected | AtomicLongFieldUpdater() | Защищенный конструктор без действий, предназначенный для использования подклассами. |
Методы
| Модификатор и тип | Метод | Описание |
|---|---|---|
long | accumulateAndGet(T obj,
long x,
LongBinaryOperator accumulatorFunction) | Атомно обновляет (с эффектами памяти, как указано в |
long | addAndGet(T obj,
long delta) | Атомно добавляет заданное значение к текущему значению поля данного объекта, управляемого этим апдейтером. |
abstract boolean | compareAndSet(T obj,
long expect,
long update) | Атомно устанавливает поле данного объекта, управляемого этим апдейтером, в заданное обновлённое значение, если текущее значение |
long | decrementAndGet(T obj) | Атомно уменьшает на единицу текущее значение поля данного объекта, управляемого этим апдейтером. |
abstract long | get(T obj) | Возвращает текущее значение, хранящееся в поле данного объекта, управляемого этим апдейтером. |
long | getAndAccumulate(T obj,
long x,
LongBinaryOperator accumulatorFunction) | Атомно обновляет (с эффектами памяти, как указано в |
long | getAndAdd(T obj,
long delta) | Атомно добавляет заданное значение к текущему значению поля данного объекта, управляемого этим апдейтером. |
long | getAndDecrement(T obj) | Атомно уменьшает на единицу текущее значение поля данного объекта, управляемого этим апдейтером. |
long | getAndIncrement(T obj) | Атомно увеличивает на единицу текущее значение поля данного объекта, управляемого этим апдейтером. |
long | getAndSet(T obj,
long newValue) | Атомно устанавливает поле данного объекта, управляемого этим апдейтером, в заданное значение и возвращает старое значение. |
long | getAndUpdate(T obj,
LongUnaryOperator updateFunction) | Атомно обновляет (с эффектами памяти, как указано в |
long | incrementAndGet(T obj) | Атомно увеличивает на единицу текущее значение поля данного объекта, управляемого этим апдейтером. |
abstract void | lazySet(T obj,
long newValue) | В конечном итоге устанавливает поле данного объекта, управляемого этим апдейтером, в заданное обновленное значение. |
static <U> AtomicLongFieldUpdater<U> | newUpdater(Class<U> tclass,
String fieldName) | Создает и возвращает апдейтер для объектов с данным полем. |
abstract void | set(T obj,
long newValue) | Устанавливает поле данного объекта, управляемого этим апдейтером, в заданное обновлённое значение. |
long | updateAndGet(T obj,
LongUnaryOperator updateFunction) | Атомно обновляет (с эффектами памяти, как указано в |
abstract boolean | weakCompareAndSet(T obj,
long expect,
long update) | Атомно устанавливает поле данного объекта, управляемого этим апдейтером, в заданное обновлённое значение, если текущее значение |
Методы, объявленные в классе java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait Конструкторы
AtomicLongFieldUpdater
protected AtomicLongFieldUpdater()
Защищённый конструктор без действий, используемый подклассами.
Методы
newUpdater
public static <U> AtomicLongFieldUpdater<U> newUpdater(Class<U> tclass,
String fieldName) Создаёт и возвращает апдейтер для объектов с заданным полем. Аргумент Class необходим для проверки соответствия рефлективных типов и типов дженериков.
- Параметры типа:
-
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) Устанавливает поле заданного объекта, управляемого этим апдейтером, в заданное обновлённое значение. Эта операция гарантированно действует как volatile сохранение относительно последующих вызовов 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, 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.
https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/concurrent/atomic/AtomicLongFieldUpdater.html