Spec-Zone.ru › OpenJDK 27

Класс 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
Модификатор и тип Метод Описание
byte byteValue()
Возвращает значение указанного числа как byte.
short shortValue()
Возвращает значение указанного числа как short.

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

clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
Модификатор и тип Метод Описание
protected Object clone()
Создает и возвращает копию этого объекта.
boolean equals(Object obj)
Указывает, равен ли какой-либо другой объект этому объекту.
protected void finalize()
Устарело, планируется удаление: этот элемент API может быть удален в будущей версии.
Финализация объявлена устаревшей и подлежит удалению в одном из будущих выпусков.
final Class<?> getClass()
Возвращает класс времени выполнения этого Object.
int hashCode()
Возвращает хеш-код этого объекта.
final void notify()
Пробуждает один поток, ожидающий на мониторе этого объекта.
final void notifyAll()
Пробуждает все потоки, ожидающие на мониторе этого объекта.
final void wait()
Заставляет текущий поток ожидать до тех пор, пока он не будет пробужден, обычно посредством уведомления или прерывания.
final void wait(long timeoutMillis)
Заставляет текущий поток ожидать до тех пор, пока он не будет пробужден, обычно посредством уведомления или прерывания, либо пока не пройдет заданное количество реального времени.
final void wait(long timeoutMillis, int nanos)
Заставляет текущий поток ожидать до тех пор, пока он не будет пробужден, обычно посредством уведомления или прерывания, либо пока не пройдет заданное количество реального времени.

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

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, 2026, 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.

Spec-Zone.ru

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