Spec-Zone.ru › OpenJDK 17

Класс 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()
Возвращает строковое представление текущего значения.

Методы, объявленные в классе java.lang.Number

byteValue, shortValue

Методы, объявленные в классе java.lang.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.

© 1993, 2021, 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/17/docs/api/java.base/java/util/concurrent/atomic/DoubleAccumulator.html

Spec-Zone.ru

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