モジュール 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
関連項目: