モジュール java.base

クラスLongAccumulator

java.lang.Object
java.lang.Number
java.util.concurrent.atomic.LongAccumulator
すべての実装されたインタフェース:
Serializable

public class LongAccumulator extends Number implements Serializable
指定された関数を使用して更新される処理中のlong値を一緒に保持する1つ以上の変数。 更新(メソッドaccumulate(long))がスレッド間で競合すると、競合を減らすために変数セットが動的に拡大する場合があります。 メソッドget() (または、等価のlongValue())は、更新を保持している変数にまたがる現在の値を返します。

きめ細かい同期制御のためではなく統計収集などの目的に使用される共通の値が、複数のスレッドによって更新される場合、通常はAtomicLongよりもこのクラスをお薦めします。 更新の競合が少ないときは、2つのクラスの特徴は似ています。 競合が多いときは、期待されるスループットはこのクラスの方がかなり高くなります。ただし、容量消費も多くなります。

スレッド内またはスレッド間での累積の順序は保証されていないため、それに依存することはできません。したがって、累積の順序が重要でない関数に対してのみ、このクラスを適用できます。 指定されたアキュムレータ関数は、試行した更新がスレッド間の競合のため失敗したときに再度適用される可能性があるため、副作用を持つべきではありません。 予測可能な結果のためには、アキュムレータ関数は連想的かつ可換でなければなりません。 この関数は、既存の値(または同一性)を1つの引数として、与えられた更新をもう1つの引数として適用します。 たとえば、処理中の最大値を保持するために、 Long::maxとともにLong.MIN_VALUEを単位元として指定することができます。

クラスLongAdderは、このクラスの機能に似た、カウントと合計を保持するという共通の特殊ケースのための機能を提供します。 new LongAdder()呼出しはnew LongAccumulator((x, y) -> x + y, 0L)と等価です。

このクラスはNumberを拡張しますが、equalshashCode compareToなどのメソッドを定義しません。インスタンスでは変更が想定されているため、コレクション・キーとしては役立たないからです。

導入されたバージョン:
1.8
関連項目:
直列化された形式
  • コンストラクタのサマリー

    コンストラクタ
    コンストラクタ
    説明
    LongAccumulator​(LongBinaryOperator accumulatorFunction, long identity)
    指定されたアキュムレータ関数と単位元を使用して、新しいインスタンスを作成します。
  • メソッドのサマリー

    修飾子と型
    メソッド
    説明
    void
    accumulate​(long x)
    指定された値で更新します。
    double
    現在の値の拡張プリミティブ変換後の値をdoubleとして返します。
    float
    現在の値の拡張プリミティブ変換後の値をfloatとして返します。
    long
    get()
    現在の値を返します。
    long
    get()に続いてreset()を実行した場合と効果は同じです。
    int
    現在の値の縮小プリミティブ変換後の値をintとして返します。
    long
    get()と等価です。
    void
    更新を保持する変数を単位元値にリセットします。
    現在値の文字列表記を返します。

    クラス 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 - 2つの引数を取る、副作用のない関数
      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型に変換した値。