Класс 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 |
Создает новый экземпляр с использованием заданной функции-аккумулятора и начального значения. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
void |
accumulate |
Обновляет значение с помощью заданного значения. |
double |
doubleValue() |
Эквивалентен get(). |
float |
floatValue() |
Возвращает текущее значение как float после сужающего преобразования примитивного типа. |
double |
get() |
Возвращает текущее значение. |
double |
getThenReset() |
|
int |
intValue() |
Возвращает текущее значение как int после сужающего преобразования примитивного типа. |
long |
longValue() |
Возвращает текущее значение как long после сужающего преобразования примитивного типа. |
void |
reset() |
Сбрасывает переменные, поддерживающие обновления, до начального значения. |
String |
toString() |
Возвращает строковое представление текущего значения. |
Методы, объявленные в классе Number
byteValue, shortValue
Подробное описание конструкторов
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
doubleValue
public double doubleValue()
get().- Определен в:
-
doubleValueв классеNumber - Возвращает:
- текущее значение
longValue
public long longValue()
long после сужающего преобразования примитивного типа.intValue
public int intValue()
int после сужающего преобразования примитивного типа.floatValue
public float floatValue()
float после сужающего преобразования примитивного типа.- Определен в:
-
floatValueв классеNumber - Возвращает:
- числовое значение, представленное этим объектом после преобразования к типу
float.
© 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