java.lang.Object
java.lang.Number
java.util.concurrent.atomic.LongAccumulator
- すべての実装されたインタフェース:
- Serializable
public class LongAccumulator extends Number implements Serializable
指定された関数を使用して更新される処理中の
long値を一緒に保持する1つ以上の変数。 更新(メソッドaccumulate(long))がスレッド間で競合すると、競合を減らすために変数セットが動的に拡大する場合があります。 メソッドget() (または、等価のlongValue())は、更新を保持している変数にまたがる現在の値を返します。 
 きめ細かい同期制御のためではなく統計収集などの目的に使用される共通の値が、複数のスレッドによって更新される場合、通常はAtomicLongよりもこのクラスをお薦めします。 更新の競合が少ないときは、2つのクラスの特徴は似ています。 競合が多いときは、期待されるスループットはこのクラスの方がかなり高くなります。ただし、容量消費も多くなります。 
 
スレッド内またはスレッド間での累積の順序は保証されていないため、それに依存することはできません。したがって、累積の順序が重要でない関数に対してのみ、このクラスを適用できます。 指定されたアキュムレータ関数は、試行した更新がスレッド間の競合のため失敗したときに再度適用される可能性があるため、副作用を持つべきではありません。 予測可能な結果のためには、アキュムレータ関数は連想的かつ可換でなければなりません。 この関数は、既存の値(または同一性)を1つの引数として、与えられた更新をもう1つの引数として適用します。 たとえば、処理中の最大値を保持するために、 Long::maxとともにLong.MIN_VALUEを単位元として指定することができます。 
 
クラスLongAdderは、このクラスの機能に似た、カウントと合計を保持するという共通の特殊ケースのための機能を提供します。 new LongAdder()呼出しはnew LongAccumulator((x, y) -> x + y, 0L)と等価です。 
 
このクラスはNumberを拡張しますが、equals、hashCode、 compareToなどのメソッドを定義しません。インスタンスでは変更が想定されているため、コレクション・キーとしては役立たないからです。
- 導入されたバージョン:
- 1.8
- 関連項目:
- 直列化された形式
- 
コンストラクタのサマリーコンストラクタ コンストラクタ 説明 LongAccumulator(LongBinaryOperator accumulatorFunction, long identity)指定されたアキュムレータ関数と単位元を使用して、新しいインスタンスを作成します。
- 
メソッドのサマリー修飾子と型 メソッド 説明 voidaccumulate(long x)指定された値で更新します。doubledoubleValue()現在の値の拡張プリミティブ変換後の値をdoubleとして返します。floatfloatValue()現在の値の拡張プリミティブ変換後の値をfloatとして返します。longget()現在の値を返します。longgetThenReset()intintValue()現在の値の縮小プリミティブ変換後の値をintとして返します。longlongValue()get()と等価です。voidreset()更新を保持する変数を単位元値にリセットします。StringtoString()現在値の文字列表記を返します。クラス java.lang.Numberで宣言されたメソッドbyteValue, shortValue
- 
コンストラクタの詳細- 
LongAccumulatorpublic LongAccumulator(LongBinaryOperator accumulatorFunction, long identity)指定されたアキュムレータ関数と単位元を使用して、新しいインスタンスを作成します。- パラメータ:
- accumulatorFunction- 2つの引数を取る、副作用のない関数
- identity- アキュムレータ関数の単位元(初期値)
 
 
- 
- 
メソッドの詳細- 
ACCUMulatepublic void accumulate(long x)指定された値で更新します。- パラメータ:
- x- 値
 
- 
getpublic long get()現在の値を返します。 返される値は原子的スナップショットではありません。並行更新がない場合の呼出しでは正確な結果が返されますが、値の計算中に発生した並行更新は組み込まれない可能性があります。- 戻り値:
- 現行値
 
- 
resetpublic void reset()更新を保持する変数を単位元値にリセットします。 このメソッドは、新しいアップデータを作成する代わりに利用できますが、並行更新がない場合のみ有効です。 このメソッドは本質的に危ういので、並行して更新を行っているスレッドがないことがわかっている場合のみ使用するようにしてください。
- 
getThenResetpublic long getThenReset()get()に続いてreset()を実行した場合と効果は同じです。 たとえば、マルチスレッド計算の間の静止点の期間中に、このメソッドが適用される場合があります。 このメソッドと並行して更新が行われている場合、返される値は、リセット前に発生した最終の値であることは保証されません。- 戻り値:
- リセット前の値
 
- 
toStringpublic String toString()現在値の文字列表記を返します。
- 
longValuepublic long longValue()get()と等価です。
- 
intValuepublic int intValue()現在の値の縮小プリミティブ変換後の値をintとして返します。
- 
floatValuepublic float floatValue()現在の値の拡張プリミティブ変換後の値をfloatとして返します。- 定義:
- floatValue、クラス:- Number
- 戻り値:
- このオブジェクトが表す数値をfloat型に変換した値。
 
- 
doubleValuepublic double doubleValue()現在の値の拡張プリミティブ変換後の値をdoubleとして返します。- 定義:
- doubleValue、クラス:- Number
- 戻り値:
- このオブジェクトが表す数値をdouble型に変換した値。
 
 
-