Класс LongAdder
- Все реализованные интерфейсы:
Serializable
public class LongAdder extends Number implements Serializable
long. Когда обновления (метод add(long)) конкурируют между потоками, множество переменных может динамически расти для уменьшения конкуренции. Метод sum() (или, эквивалентно, longValue()) возвращает текущую общую сумму по всем переменным, поддерживающим сумму. Этот класс обычно предпочтительнее AtomicLong, когда несколько потоков обновляют общую сумму, используемую для таких целей, как сбор статистики, а не для тонкого управления синхронизацией. При низкой конкуренции при обновлении эти два класса имеют схожие характеристики. Но при высокой конкуренции ожидаемая пропускная способность этого класса значительно выше за счет большего потребления памяти.
LongAdder можно использовать с ConcurrentHashMap для поддержания масштабируемой карты частот (форма гистограммы или мультимножества). Например, чтобы добавить счёт к ConcurrentHashMap<String,LongAdder> freqs, инициализируя, если он ещё не присутствует, можно использовать
freqs.computeIfAbsent(key, k -> new LongAdder()).increment();
Этот класс расширяет Number, но не определяет методы, такие как equals, hashCode и
compareTo, так как ожидается, что экземпляры будут изменены, и поэтому они не являются полезными в качестве ключей коллекций.
- Since:
- 1.8
- См. также:
Краткое описание конструкторов
| Конструктор | Описание |
|---|---|
LongAdder() |
Создаёт новый аддер с начальной суммой ноль. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
void |
add |
Добавляет заданное значение. |
void |
decrement() |
Эквивалентно add(-1). |
double |
doubleValue() |
Возвращает sum() как double после расширяющего примитивного преобразования. |
float |
floatValue() |
Возвращает sum() как float после расширяющего примитивного преобразования. |
void |
increment() |
Эквивалентно add(1). |
int |
intValue() |
Возвращает sum() как int после сужающего примитивного преобразования. |
long |
longValue() |
Эквивалентно sum(). |
void |
reset() |
Сбрасывает переменные, поддерживающие сумму, до нуля. |
long |
sum() |
Возвращает текущую сумму. |
long |
sumThenReset() |
|
String |
toString() |
Возвращает строковое представление sum(). |
Методы, объявленные в классе java.lang.Number
byteValue, shortValue
Подробное описание конструкторов
LongAdder
public LongAdder()
Подробное описание методов
add
public void add(long x)
- Параметры:
-
x- значение для добавления
increment
public void increment()
add(1).decrement
public void decrement()
add(-1).sum
public long sum()
- Возвращает:
- сумму
reset
public void reset()
sumThenReset
public long sumThenReset()
sum(), за которым следует reset(). Этот метод может применяться, например, в точках покоя между многопоточными вычислениями. Если есть обновления, одновременные с этим методом, возвращаемое значение не гарантируется, что это последнее значение, которое произошло перед сбросом.- Возвращает:
- сумму
toString
public String toString()
sum().- Переопределяет:
-
toStringв классеObject - Возвращает:
- строковое представление
sum()
longValue
public long longValue()
sum().- Определено в:
-
longValueв классеNumber - Возвращает:
- сумму
intValue
public int intValue()
sum() как int после сужения примитивного преобразования.- Определено в:
-
intValueв классеNumber - Возвращает:
- числовое значение, представленное этим объектом после преобразования в тип
int.
floatValue
public float floatValue()
sum() как float после расширения примитивного преобразования.- Определено в:
-
floatValueв классеNumber - Возвращает:
- числовое значение, представленное этим объектом после преобразования в тип
float.
doubleValue
public double doubleValue()
sum() как 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/LongAdder.html