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