Spec-Zone.ru › OpenJDK 17

Класс 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, 2021, 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/17/docs/api/java.base/java/util/concurrent/atomic/LongAccumulator.html

Spec-Zone.ru

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