Spec-Zone.ru › OpenJDK 24

Класс 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()
Возвращает строковое представление текущего значения.

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

byteValue, shortValue

Методы, объявленные в классе java.lang.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.

© 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://download.java.net/java/early_access/jdk24/docs/api/java.base/java/util/concurrent/atomic/LongAccumulator.html

Spec-Zone.ru

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