Spec-Zone.ru › OpenJDK 27

Класс 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
Модификатор и тип Метод Описание
byte byteValue()
Возвращает значение указанного числа как byte.
short shortValue()
Возвращает значение указанного числа как short.

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

clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
Модификатор и тип Метод Описание
protected Object clone()
Создает и возвращает копию этого объекта.
boolean equals(Object obj)
Указывает, равен ли какой-либо другой объект этому объекту.
protected void finalize()
Устарело, будет удалено: этот элемент API подлежит удалению в будущей версии.
Финализация объявлена устаревшей и подлежит удалению в одном из будущих выпусков.
final Class<?> getClass()
Возвращает класс времени выполнения этого Object.
int hashCode()
Возвращает хеш-код этого объекта.
final void notify()
Пробуждает один поток, ожидающий на мониторе этого объекта.
final void notifyAll()
Пробуждает все потоки, ожидающие на мониторе этого объекта.
final void wait()
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова notify или interrupt.
final void wait(long timeoutMillis)
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова notify или interrupt, либо истечения заданного промежутка реального времени.
final void wait(long timeoutMillis, int nanos)
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова 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

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, 2026, 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.

Spec-Zone.ru

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