Spec-Zone.ru › OpenJDK 25

Класс 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

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

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

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

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, 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/DoubleAccumulator.html

Spec-Zone.ru

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