Spec-Zone.ru › OpenJDK 27

Класс DoubleAccumulator

java.lang.Object
java.lang.Number
java.util.concurrent.atomic.DoubleAccumulator
Все реализуемые интерфейсы:
Serializable
public class DoubleAccumulator extends Number implements Serializable
Одна или несколько переменных, которые совместно поддерживают текущее значение double, обновляемое с помощью заданной функции. Когда обновления (метод accumulate(double)) выполняются из разных потоков с конкуренцией за доступ, набор переменных может динамически увеличиваться для снижения конкуренции. Метод get() (или, что эквивалентно, doubleValue()) возвращает текущее значение по всем переменным, в которых хранятся обновления.

Этот класс обычно предпочтительнее альтернатив, когда несколько потоков обновляют общее значение, используемое, например, для сводной статистики, которую часто обновляют, но читают реже.

Заданная функция-аккумулятор не должна иметь побочных эффектов, поскольку ее применение может повторяться, если попытки обновления завершаются неудачно из-за конкуренции между потоками. Для получения предсказуемых результатов функция-аккумулятор должна быть коммутативной и ассоциативной в пределах допуска чисел с плавающей запятой, требуемого в контексте использования. Функция применяется к существующему значению (или значению идентичности) в качестве одного аргумента и к заданному обновлению в качестве другого аргумента. Например, чтобы поддерживать текущее максимальное значение, можно передать Double::max вместе с Double.NEGATIVE_INFINITY в качестве значения идентичности. Порядок накопления значений внутри потоков и между ними не гарантируется. Поэтому этот класс может быть неприменим, если требуется численная стабильность, особенно при объединении значений, порядки величин которых существенно различаются.

Класс DoubleAdder предоставляет аналоги функциональности этого класса для распространенного частного случая поддержания сумм. Вызов new DoubleAdder() эквивалентен new DoubleAccumulator((x, y) -> x + y, 0.0).

Этот класс наследуется от Number, но не определяет такие методы, как equals, hashCode и compareTo, поскольку предполагается, что экземпляры будут изменяться, а значит, они не подходят в качестве ключей коллекций.

Начиная с версии:
1.8
См. также:
  • Сериализованная форма

Краткое описание конструкторов

Конструктор Описание
DoubleAccumulator(DoubleBinaryOperator accumulatorFunction, double identity)
Создает новый экземпляр с заданными функцией-аккумулятором и элементом идентичности.

Краткое описание методов

Модификатор и тип Метод Описание
void accumulate(double x)
Обновляет значение с использованием заданного значения.
double doubleValue()
Эквивалентен get().
float floatValue()
Возвращает текущее значение как float после сужающего примитивного преобразования.
double get()
Возвращает текущее значение.
double getThenReset()
По эффекту эквивалентен вызову get(), за которым следует вызов reset().
int intValue()
Возвращает текущее значение как int после сужающего примитивного преобразования.
long longValue()
Возвращает текущее значение как long после сужающего примитивного преобразования.
void reset()
Сбрасывает переменные, поддерживающие обновления, до значения идентичности.
String toString()
Возвращает строковое представление текущего значения.

Методы, объявленные в классе 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()
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова notify или interrupt.
final void wait(long timeoutMillis)
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова notify или interrupt, либо истечения заданного времени.
final void wait(long timeoutMillis, int nanos)
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова notify или interrupt, либо истечения заданного времени.

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

DoubleAccumulator

public DoubleAccumulator(DoubleBinaryOperator accumulatorFunction, double identity)
Создает новый экземпляр с заданными функцией-аккумулятором и элементом идентичности.
Параметры:
accumulatorFunction — функция двух аргументов без побочных эффектов
identity — идентичность (начальное значение) для функции-аккумулятора

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

accumulate

public void accumulate(double x)
Обновляет значение с использованием заданного значения.
Параметры:
x — значение

get

public double get()
Возвращает текущее значение. Возвращаемое значение НЕ является атомарным снимком: вызов при отсутствии параллельных обновлений возвращает точный результат, но параллельные обновления, происходящие во время вычисления значения, могут не учитываться.
Возвращает:
текущее значение

reset

public void reset()
Сбрасывает переменные, поддерживающие обновления, до значения идентичности. Этот метод может быть полезной альтернативой созданию нового объекта-обновителя, но эффективен только при отсутствии параллельных обновлений. Поскольку этот метод по своей природе подвержен гонкам, его следует использовать только при уверенности в том, что ни один поток не выполняет обновление параллельно.

getThenReset

public double getThenReset()
По эффекту эквивалентен вызову get(), за которым следует вызов reset(). Этот метод может быть полезен, например, в моменты простоя между многопоточными вычислениями. Если параллельно с этим методом выполняются обновления, не гарантируется, что возвращаемое значение будет последним значением, полученным до сброса.
Возвращает:
значение до сброса

toString

public String toString()
Возвращает строковое представление текущего значения.
Переопределяет:
toString в классе Object
Возвращает:
строковое представление текущего значения

doubleValue

public double doubleValue()
Эквивалентен get().
Определено в:
doubleValue в классе Number
Возвращает:
текущее значение

longValue

public long longValue()
Возвращает текущее значение как long после сужающего примитивного преобразования.
Определено в:
longValue в классе Number
Возвращает:
числовое значение, представленное этим объектом после преобразования к типу long.

intValue

public int intValue()
Возвращает текущее значение как int после сужающего примитивного преобразования.
Определено в:
intValue в классе Number
Возвращает:
числовое значение, представленное этим объектом после преобразования к типу int.

floatValue

public float floatValue()
Возвращает текущее значение как float после сужающего примитивного преобразования.
Определено в:
floatValue в классе Number
Возвращает:
числовое значение, представленное этим объектом после преобразования к типу float.

Сообщить об ошибке или предложить улучшение
Дополнительную справочную информацию по 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