Класс 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() |
Эквивалентно |
float |
floatValue() |
Возвращает текущее значение текущее значение как |
double |
get() |
Возвращает текущее значение. |
double |
getThenReset() |
Эквивалентно в действии |
int |
intValue() |
Возвращает текущее значение текущее значение как |
long |
longValue() |
Возвращает текущее значение текущее значение как |
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()
Возвращает строковое представление текущего значения.
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, 2020, 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/11/docs/api/java.base/java/util/concurrent/atomic/DoubleAccumulator.html