Класс LongAccumulator
- java.lang.Object
-
- java.lang.Number
-
- java.util.concurrent.atomic.LongAccumulator
- Все реализованные интерфейсы:
Serializable
public class LongAccumulator extends Number implements Serializable
Одна или несколько переменных, вместе поддерживающих текущее long значение, обновляемое с помощью предоставленной функции. При конкурентных обновлениях (метод accumulate(long)) между потоками набор переменных может динамически увеличиваться для уменьшения конкуренции. Метод get() (или, равносильно, longValue()) возвращает текущее значение по всем переменным, поддерживающим обновления.
Этот класс обычно предпочтительнее AtomicLong, когда несколько потоков обновляют общее значение, которое используется для таких целей, как сбор статистики, а не для управления тонкими синхронизациями. При низкой конкуренции при обновлениях оба класса имеют сходные характеристики. Но при высокой конкуренции ожидаемая производительность этого класса значительно выше за счет большего потребления памяти.
Порядок накопления внутри или между потоками не гарантируется и не может быть использован, поэтому этот класс применим только к функциям, для которых порядок накопления не имеет значения. Предоставленная функция накопления должна быть без побочных эффектов, так как она может быть повторно применена, когда попытки обновления терпят неудачу из-за конкуренции между потоками. Для предсказуемых результатов функция накопления должна быть ассоциативной и коммутативной. Функция применяется к существующему значению (или идентичности) как к одному аргументу, а к заданному обновлению — как к другому аргументу. Например, для поддержания текущего максимального значения вы могли бы предоставить
Long::max вместе с Long.MIN_VALUE в качестве идентичности.
Класс LongAdder предоставляет аналоги функциональности этого класса для общего частного случая поддержания счетчиков и сумм. Вызов new LongAdder() эквивалентен new
LongAccumulator((x, y) -> x + y, 0L).
Этот класс расширяет Number, но не определяет методы, такие как equals, hashCode и
compareTo, так как ожидается, что экземпляры будут изменяться, а значит, не подходят в качестве ключей коллекций.
- С тех пор:
- 1.8
- См. также:
- Сериализованная форма
Конструкторы
| Конструктор | Описание |
|---|---|
LongAccumulator(LongBinaryOperator accumulatorFunction,
long identity) | Создает новый экземпляр с использованием заданной функции накопления и элемента идентичности. |
Методы
| Модификатор и тип | Метод | Описание |
|---|---|---|
void | accumulate(long x) | Обновляет значением. |
double | doubleValue() | Возвращает текущее значение как |
float | floatValue() | Возвращает текущее значение как |
long | get() | Возвращает текущее значение. |
long | 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 Конструкторы
LongAccumulator
public LongAccumulator(LongBinaryOperator accumulatorFunction,
long identity) Создает новый экземпляр с использованием заданной функции накопления и элемента идентичности.
- Параметры:
-
accumulatorFunction- функция без побочных эффектов от двух аргументов -
identity- идентичность (начальное значение) для функции накопления
Методы
accumulate
public void accumulate(long x)
Обновляет значением.
- Параметры:
-
x- значение
get
public long get()
Возвращает текущее значение. Возвращаемое значение НЕ является атомным снимком; вызов в отсутствие конкурентных обновлений возвращает точный результат, но конкурентные обновления, которые происходят в то время, когда значение вычисляется, могут не быть включены.
- Возвращает:
- текущее значение
reset
public void reset()
Сбрасывает переменные, поддерживающие обновления, до значения идентичности. Этот метод может быть полезной альтернативой созданию нового обновляющего элемента, но эффективен только при отсутствии конкурентных обновлений. Поскольку этот метод по своей природе расовый, он должен использоваться только тогда, когда известно, что ни один поток не обновляет его одновременно.
getThenReset
public long getThenReset()
Эквивалентно get(), за которым следует reset(). Этот метод может быть применен, например, во время точек покоя между многопоточными вычислениями. Если существуют обновления, параллельные этому методу, возвращаемое значение не гарантируется как окончательное значение, возникшее до сброса.
- Возвращает:
- значение до сброса
toString
public String toString()
Возвращает строковое представление текущего значения.
longValue
public long longValue()
Эквивалентно get().
intValue
public int intValue()
Возвращает текущее значение как int после сужающего преобразования примитива.
- Определено в:
-
intValueв классеNumber - Возвращает:
- числовое значение, представленное этим объектом после преобразования в тип
int.
floatValue
public float floatValue()
Возвращает текущее значение как float после расширяющего преобразования примитива.
- Определено в:
-
floatValueв классеNumber - Возвращает:
- числовое значение, представленное этим объектом после преобразования в тип
float.
doubleValue
public double doubleValue()
Возвращает текущее значение как double после расширяющего преобразования примитива.
- Определено в:
-
doubleValueв классеNumber - Возвращает:
- числовое значение, представленное этим объектом после преобразования в тип
double.
© 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/LongAccumulator.html