Класс 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, поскольку предполагается, что экземпляры будут изменяться, а потому они не подходят в качестве ключей коллекций.
- С версии:
- 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(). |
Методы, объявленные в классе 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
longValue
intValue
floatValue
public float floatValue()
sum() как float после расширяющего преобразования примитивного типа.- Определен в:
-
floatValueв классеNumber - Возвращает:
- числовое значение, представленное этим объектом после преобразования к типу
float.
doubleValue
public double doubleValue()
sum() как 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://docs.oracle.com/en/java/javase/25/docs/api/java.base/java/util/concurrent/atomic/LongAdder.html