モジュール java.base

クラスDoubleAccumulator

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を拡張しますが、equalshashCode compareToなどのメソッドを定義しません。インスタンスでは変更が想定されているため、コレクション・キーとしては役立たないからです。

導入されたバージョン:
1.8
関連項目: