public class LongAccumulator extends Number implements Serializable
long
値を一緒に保持する1つ以上の変数。更新(メソッドaccumulate(long)
)がスレッド間で競合すると、競合を減らすために変数セットが動的に拡大する場合があります。メソッドget()
(または、等価のlongValue()
)は、更新を保持している変数にまたがる現在の値を返します。
きめ細かい同期制御のためではなく統計収集などの目的に使用される共通の値が、複数のスレッドによって更新される場合、通常はAtomicLong
よりもこのクラスをお薦めします。更新の競合が少ないときは、2つのクラスの特徴は似ています。競合が多いときは、期待されるスループットはこのクラスの方がかなり高くなります。ただし、容量消費も多くなります。
スレッド内またはスレッド間での累積の順序は保証されていないため、それに依存することはできません。したがって、累積の順序が重要でない関数に対してのみ、このクラスを適用できます。指定されたアキュムレータ関数は、試行した更新がスレッド間の競合のため失敗したときに再度適用される可能性があるため、副作用を持つべきではありません。関数は、現在の値を第1引数とし、指定された更新値を第2引数として適用されます。たとえば、処理中の最大値を保持するために、Long::max
とともにLong.MIN_VALUE
を単位元として指定することができます。
クラスLongAdder
は、このクラスの機能に似た、カウントと合計を保持するという共通の特殊ケースのための機能を提供します。new LongAdder()
呼出しはnew LongAccumulator((x, y) -> x + y, 0L
と等価です。
このクラスはNumber
を拡張しますが、equals
、hashCode
、compareTo
などのメソッドを定義しません。インスタンスでは変更が想定されているため、コレクション・キーとしては役立たないからです。
コンストラクタと説明 |
---|
LongAccumulator(LongBinaryOperator accumulatorFunction, long identity)
指定されたアキュムレータ関数と単位元を使用して、新しいインスタンスを作成します。
|
修飾子と型 | メソッドと説明 |
---|---|
void |
accumulate(long x)
指定された値で更新します。
|
double |
doubleValue()
現在の値の拡張プリミティブ変換後の値を
double として返します。 |
float |
floatValue()
現在の値の拡張プリミティブ変換後の値を
float として返します。 |
long |
get()
現在の値を返します。
|
long |
getThenReset()
|
int |
intValue()
現在の値の縮小プリミティブ変換後の値を
int として返します。 |
long |
longValue()
get() と等価です。 |
void |
reset()
更新を保持する変数を単位元値にリセットします。
|
String |
toString()
現在値の文字列表記を返します。
|
byteValue, shortValue
public LongAccumulator(LongBinaryOperator accumulatorFunction, long identity)
accumulatorFunction
- 2つの引数を取る、副作用のない関数identity
- アキュムレータ関数の単位元(初期値)public void accumulate(long x)
x
- 値public long get()
public void reset()
public long getThenReset()
get()
に続いてreset()
を実行した場合と効果は同じです。たとえば、マルチスレッド計算の間の静止点の期間中に、このメソッドが適用される場合があります。このメソッドと並行して更新が行われている場合、返される値は、リセット前に発生した最終の値であることは保証されません。public int intValue()
int
として返します。public float floatValue()
float
として返します。floatValue
、クラス: Number
float
型に変換した値。public double doubleValue()
double
として返します。doubleValue
、クラス: Number
double
型に変換した値。 バグまたは機能を送信
詳細なAPIリファレンスおよび開発者ドキュメントについては、Java SEのドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright© 1993, 2014, Oracle and/or its affiliates. All rights reserved.