public class LongAdder extends Number implements Serializable
long
の合計を一緒に保持する1つ以上の変数。更新(メソッドadd(long)
)がスレッド間で競合すると、競合を減らすために変数セットが動的に拡大する場合があります。メソッドsum()
(または、等価のlongValue()
)は、合計を保持している変数にまたがって組み合わされた現在の合計を返します。
きめ細かい同期制御のためではなく統計収集などの目的に使用される共通の合計が、複数のスレッドによって更新される場合、通常はAtomicLong
よりもこのクラスをお薦めします。更新の競合が少ないときは、2つのクラスの特徴は似ています。競合が多いときは、期待されるスループットはこのクラスの方がかなり高くなります。ただし、容量消費も多くなります。
LongAdderをConcurrentHashMap
で使用すると、スケーラブルな頻度マップ(ヒストグラムまたはマルチセットの形式)を保持できます。たとえば、ConcurrentHashMap<String,LongAdder> freqs
にカウントを追加し、まだ存在していない場合は初期化を行うには、freqs.computeIfAbsent(k -> new LongAdder()).increment();
を使用できます。
このクラスはNumber
を拡張しますが、equals
、hashCode
、compareTo
などのメソッドを定義しません。インスタンスでは変更が想定されているため、コレクション・キーとしては役立たないからです。
コンストラクタと説明 |
---|
LongAdder()
合計の初期値ゼロを使用して、新しいアダーを作成します。
|
修飾子と型 | メソッドと説明 |
---|---|
void |
add(long x)
指定された値を加算します。
|
void |
decrement()
add(-1) と等価です。 |
double |
doubleValue()
sum() の拡張プリミティブ変換後の値をdouble として返します。 |
float |
floatValue()
sum() の拡張プリミティブ変換後の値をfloat として返します。 |
void |
increment()
add(1) と等価です。 |
int |
intValue()
sum() の縮小プリミティブ変換後の値をint として返します。 |
long |
longValue()
sum() と等価です。 |
void |
reset()
合計を保持する変数をゼロにリセットします。
|
long |
sum()
現在の合計を返します。
|
long |
sumThenReset()
|
String |
toString()
sum() の文字列表現を返します。 |
byteValue, shortValue
public void add(long x)
x
- 加算する値public void increment()
add(1)
と等価です。public void decrement()
add(-1)
と等価です。public long sum()
public void reset()
public long sumThenReset()
sum()
に続いてreset()
を実行した場合と効果は同じです。たとえば、マルチスレッド計算の間の静止点の期間中に、このメソッドが適用される場合があります。このメソッドと並行して更新が行われている場合、返される値は、リセット前に発生した最終の値であることは保証されません。public int intValue()
sum()
の縮小プリミティブ変換後の値をint
として返します。public float floatValue()
sum()
の拡張プリミティブ変換後の値をfloat
として返します。floatValue
、クラス: Number
float
型に変換した値。public double doubleValue()
sum()
の拡張プリミティブ変換後の値をdouble
として返します。doubleValue
、クラス: Number
double
型に変換した値。 バグまたは機能を送信
詳細なAPIリファレンスおよび開発者ドキュメントについては、Java SEのドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright© 1993, 2014, Oracle and/or its affiliates. All rights reserved.