Spec-Zone.ru › OpenJDK 25

Класс LongAdder

java.lang.Object
java.lang.Number
java.util.concurrent.atomic.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(long x)
Добавляет заданное значение.
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()
По эффекту эквивалентен вызову sum(), за которым следует вызов reset().
String toString()
Возвращает строковое представление sum().

Методы, объявленные в классе Number

byteValue, shortValue

Методы, объявленные в классе Object

clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait

Подробное описание конструкторов

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.

Сообщить об ошибке или предложить улучшение
Дополнительную справочную информацию по API и документацию для разработчиков см. в документации Java SE, содержащей более подробные описания для разработчиков, обзоры концепций, определения терминов, обходные решения и работающие примеры кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или ее аффилированных лиц в США и других странах.
Авторские права © 1993, 2025, Oracle и/или ее аффилированные лица, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 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

Spec-Zone.ru

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