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