モジュール java.base

クラスLongAdder

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

public class LongAdder extends Number implements Serializable
初期値ゼロのlongの合計を一緒に保持する1つ以上の変数。 更新(メソッドadd(long))がスレッド間で競合すると、競合を減らすために変数セットが動的に拡大する場合があります。 メソッドsum() (または、等価のlongValue())は、合計を保持している変数にまたがって組み合わされた現在の合計を返します。

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

LongAdderをConcurrentHashMapで使用すると、スケーラブルな頻度マップ(ヒストグラムまたはマルチセットの形式)を保持できます。 たとえば、ConcurrentHashMap<String,LongAdder> freqsにカウントを追加し、まだ存在していなければ初期化するには、 freqs.computeIfAbsent(key, k -> new LongAdder()).increment();を使用

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

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

    コンストラクタ
    コンストラクタ
    説明
    合計の初期値ゼロを使用して、新しいアダーを作成します。
  • メソッドのサマリー

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

    クラス java.lang.Numberで宣言されたメソッド

    byteValue, shortValue

    クラス java.lang.Objectで宣言されたメソッド

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
  • コンストラクタの詳細

    • LongAdder

      public LongAdder()
      合計の初期値ゼロを使用して、新しいアダーを作成します。
  • メソッドの詳細

    • add

      public void add(long x)
      指定された値を加算します。
      パラメータ:
      x - 加算する値
    • increment

      public void increment()
      add(1)と同等です。
    • decrement

      public void decrement()
      add(-1)と同等です。
    • sum

      public long sum()
      現在の合計を返します。 返される値は原子的スナップショットではありません。並行更新がない場合の呼出しでは正確な結果が返されますが、合計の計算中に発生した並行更新は組み込まれない可能性があります。
      戻り値:
      合計
    • reset

      public void reset()
      合計を保持する変数をゼロにリセットします。 このメソッドは、新しいアダーを作成する代わりに利用できますが、並行更新がない場合のみ有効です。 このメソッドは本質的に危ういので、並行して更新を行っているスレッドがないことがわかっている場合のみ使用するようにしてください。
    • sumThenReset

      public long sumThenReset()
      sum()に続いてreset()を実行した場合と効果は同じです。 たとえば、マルチスレッド計算の間の静止点の期間中に、このメソッドが適用される場合があります。 このメソッドと並行して更新が行われている場合、返される値は、リセット前に発生した最終の値であることは保証されません
      戻り値:
      合計
    • toString

      public String toString()
      sum()の文字列表現を返します。
      オーバーライド:
      toString 、クラス:  Object
      戻り値:
      sum()の文字列表現
    • longValue

      public long longValue()
      sum()と等価です。
      定義:
      longValue、クラス: Number
      戻り値:
      合計
    • intValue

      public int intValue()
      sum()の縮小プリミティブ変換後の値をintとして返します。
      定義:
      intValue、クラス: Number
      戻り値:
      このオブジェクトが表す数値をint型に変換した値。
    • floatValue

      public float floatValue()
      sum()の拡張プリミティブ変換後の値をfloatとして返します。
      定義:
      floatValue、クラス: Number
      戻り値:
      このオブジェクトが表す数値をfloat型に変換した値。
    • doubleValue

      public double doubleValue()
      sum()の拡張プリミティブ変換後の値をdoubleとして返します。
      定義:
      doubleValue、クラス: Number
      戻り値:
      このオブジェクトが表す数値をdouble型に変換した値。