Spec-Zone.ru › OpenJDK 8

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

Возвращает текущее значение в виде double после расширяющего преобразования примитивного типа.

float floatValue()

Возвращает текущее значение в виде float после расширяющего преобразования примитивного типа.

long get()

Возвращает текущее значение.

long getThenReset()

Эквивалентно get() после reset().

int intValue()

Возвращает текущее значение в виде int после сужающего преобразования примитивного типа.

long longValue()

Эквивалентно get().

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()

Возвращает строковое представление текущего значения.

Переопределяет:
toString в классе Object
Возвращает:
строковое представление текущего значения

longValue

public long longValue()

Эквивалентно get().

Определяется:
longValue в классе Number
Возвращает:
текущее значение

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.

Spec-Zone.ru

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