Класс 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() |
Возвращает строковое представление текущего значения. |
Методы, объявленные в классе java.lang.Number
byteValue, shortValue
Подробное описание конструкторов
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, 2023, 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/21/docs/api/java.base/java/util/concurrent/atomic/LongAccumulator.html