Класс LongAccumulator
- Все реализуемые интерфейсы:
Serializable
public class LongAccumulator extends Number implements Serializable
long, обновляемое с помощью заданной функции. При конкуренции потоков за обновление (метод accumulate(long)) набор переменных может динамически увеличиваться для снижения конкуренции. Метод get() (или, что эквивалентно, longValue()) возвращает текущее значение, хранящееся в переменных, которые поддерживают обновления. Этот класс обычно предпочтительнее класса AtomicLong, если несколько потоков обновляют общее значение, используемое, например, для сбора статистики, а не для тонкого управления синхронизацией. При низкой конкуренции за обновление характеристики этих двух классов схожи. Однако при высокой конкуренции ожидаемая пропускная способность этого класса значительно выше, но за счет большего потребления памяти.
Порядок накопления внутри потоков и между ними не гарантируется, и на него нельзя полагаться, поэтому этот класс применим только к функциям, для которых порядок накопления не имеет значения. Заданная функция-аккумулятор должна быть без побочных эффектов, поскольку она может применяться повторно, если попытки обновления завершаются неудачей из-за конкуренции между потоками. Для получения предсказуемых результатов функция-аккумулятор должна быть ассоциативной и коммутативной. Функция применяется к существующему значению (или нейтральному элементу) в качестве одного аргумента и заданному обновлению в качестве другого аргумента. Например, чтобы поддерживать текущее максимальное значение, можно задать
Long::max вместе с Long.MIN_VALUE в качестве нейтрального элемента.
Класс LongAdder предоставляет аналоги функциональности этого класса для распространенного частного случая подсчета и суммирования. Вызов new LongAdder() эквивалентен new
LongAccumulator((x, y) -> x + y, 0L).
Этот класс наследуется от Number, но не определяет такие методы, как equals, hashCode и
compareTo, поскольку предполагается, что экземпляры будут изменяться, поэтому они не подходят для использования в качестве ключей коллекций.
- С версии:
- 1.8
- См. также:
Краткое описание конструкторов
| Конструктор | Описание |
|---|---|
LongAccumulator |
Создает новый экземпляр с использованием заданной функции-аккумулятора и нейтрального элемента. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
void |
accumulate |
Обновляет значение заданным значением. |
double |
doubleValue() |
Возвращает текущее значение как double после расширяющего примитивного преобразования. |
float |
floatValue() |
Возвращает текущее значение как float после расширяющего примитивного преобразования. |
long |
get() |
Возвращает текущее значение. |
long |
getThenReset() |
|
int |
intValue() |
Возвращает текущее значение как int после сужающего примитивного преобразования. |
long |
longValue() |
Эквивалентен get(). |
void |
reset() |
Сбрасывает переменные, поддерживающие обновления, до нейтрального значения. |
String |
toString() |
Возвращает строковое представление текущего значения. |
Методы, объявленные в классе Number
byteValue, shortValue | Модификатор и тип | Метод | Описание |
|---|---|---|
byte |
byteValue() |
Возвращает значение указанного числа как byte. |
short |
shortValue() |
Возвращает значение указанного числа как short. |
Методы, объявленные в классе Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait | Модификатор и тип | Метод | Описание |
|---|---|---|
protected Object |
clone() |
Создает и возвращает копию этого объекта. |
boolean |
equals |
Указывает, равен ли какой-либо другой объект этому объекту. |
protected void |
finalize() |
Устарело, будет удалено: этот элемент API подлежит удалению в будущей версии. Финализация объявлена устаревшей и подлежит удалению в одном из будущих выпусков. |
final Class |
getClass() |
Возвращает класс времени выполнения этого Object. |
int |
hashCode() |
Возвращает хеш-код этого объекта. |
final void |
notify() |
Пробуждает один поток, ожидающий на мониторе этого объекта. |
final void |
notifyAll() |
Пробуждает все потоки, ожидающие на мониторе этого объекта. |
final void |
wait() |
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова notify или interrupt. |
final void |
wait |
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова notify или interrupt, либо истечения заданного промежутка реального времени. |
final void |
wait |
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова notify или interrupt, либо истечения заданного промежутка реального времени. |
Подробное описание конструкторов
LongAccumulator
public LongAccumulator(LongBinaryOperator accumulatorFunction, long identity)
- Параметры:
-
accumulatorFunction— функция от двух аргументов без побочных эффектов -
identity— нейтральное (начальное) значение для функции-аккумулятора
Подробное описание методов
accumulate
public void accumulate(long x)
- Параметры:
-
x— значение
get
public long get()
- Возвращает:
- текущее значение
reset
public void reset()
getThenReset
public long getThenReset()
get(), за которым следует вызов reset(). Этот метод может быть полезен, например, в моменты простоя между многопоточными вычислениями. Если обновления происходят одновременно с вызовом этого метода, не гарантируется, что возвращаемое значение будет последним значением, существовавшим перед сбросом.- Возвращает:
- значение до сброса
toString
longValue
intValue
public int intValue()
int после сужающего примитивного преобразования.floatValue
public float floatValue()
float после расширяющего примитивного преобразования.- Определен в:
-
floatValueв классеNumber - Возвращает:
- числовое значение, представленное этим объектом после преобразования к типу
float.
doubleValue
public double doubleValue()
double после расширяющего примитивного преобразования.- Определен в:
-
doubleValueв классеNumber - Возвращает:
- числовое значение, представленное этим объектом после преобразования к типу
double.
© 1993, 2025, 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.