Класс 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(). |
Методы, объявленные в классе 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, 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/LongAdder.html