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