Spec-Zone.ru › OpenJDK 25

Класс LongAccumulator

java.lang.Object
java.lang.Number
java.util.concurrent.atomic.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(LongBinaryOperator accumulatorFunction, long identity)
Создаёт новый экземпляр с заданной функцией-аккумулятором и нейтральным элементом.

Краткое описание методов

Модификатор и тип Метод Описание
void accumulate(long x)
Обновляет значение заданным значением.
double doubleValue()
Возвращает текущее значение как double после расширяющего примитивного преобразования.
float floatValue()
Возвращает текущее значение как float после расширяющего примитивного преобразования.
long get()
Возвращает текущее значение.
long getThenReset()
По действию эквивалентен вызову get(), за которым следует вызов reset().
int intValue()
Возвращает текущее значение как int после сужающего примитивного преобразования.
long longValue()
Эквивалентен get().
void reset()
Сбрасывает переменные, в которых сохраняются обновления, до нейтрального значения.
String toString()
Возвращает строковое представление текущего значения.

Методы, объявленные в классе Number

byteValue, shortValue

Методы, объявленные в классе Object

clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait

Подробное описание конструкторов

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

public String toString()
Возвращает строковое представление текущего значения.
Переопределяет:
toString в классе Object
Возвращает:
строковое представление текущего значения

longValue

public long longValue()
Эквивалентен get().
Определён в:
longValue в классе Number
Возвращает:
текущее значение

intValue

public int intValue()
Возвращает текущее значение как int после сужающего примитивного преобразования.
Определён в:
intValue в классе Number
Возвращает:
числовое значение, представленное этим объектом после преобразования к типу int.

floatValue

public float floatValue()
Возвращает текущее значение как float после расширяющего примитивного преобразования.
Определён в:
floatValue в классе Number
Возвращает:
числовое значение, представленное этим объектом после преобразования к типу float.

doubleValue

public double doubleValue()
Возвращает текущее значение как double после расширяющего примитивного преобразования.
Определён в:
doubleValue в классе Number
Возвращает:
числовое значение, представленное этим объектом после преобразования к типу double.

Сообщить об ошибке или предложить улучшение
Дополнительную справочную информацию по API и документацию для разработчиков см. в разделе Документация Java SE, содержащем более подробные описания для разработчиков, концептуальные обзоры, определения терминов, обходные решения и работающие примеры кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или её аффилированных лиц в США и других странах.
Авторские права © 1993, 2025, Oracle и/или её аффилированные лица, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 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.
https://docs.oracle.com/en/java/javase/25/docs/api/java.base/java/util/concurrent/atomic/LongAccumulator.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API