モジュール java.base

クラス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
    関連項目:
    直列化された形式
    • コンストラクタの詳細

      • 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型に変換した値。