Module  java.base

Class DoubleAdder

  • All Implemented Interfaces:
    Serializable


    public class DoubleAdder
    extends Number
    implements Serializable
    一个或多个变量一起维持起始零点double和。 当跨线程争用更新(方法add(double) )时,变量集可以动态增长以减少争用。 方法sum() (或等效地doubleValue() )返回保持总和的整个变量组合的当前总和。 线程内或跨线程的累积顺序不能保证。 因此,如果需要数值稳定性,特别是当组合几乎不同数量级的值时,该类可能不适用。

    当多个线程更新用于诸如经常更新但较不频繁读取的摘要统计信息的常用值时,此类通常优于替代方案。

    该类扩展Number ,但定义诸如方法equalshashCodecompareTo ,因为实例预计将发生突变,所以不如收集钥匙有用。

    从以下版本开始:
    1.8
    另请参见:
    Serialized Form
    • 构造方法详细信息

      • DoubleAdder

        public DoubleAdder​()
        创建一个新的加法器,初始和为零。
    • 方法详细信息

      • add

        public void add​(double x)
        添加给定值。
        参数
        x - 要添加的值
      • sum

        public double sum​()
        返回当前总和。 返回的值不是原子快照; 在没有并发更新的情况下调用将返回一个准确的结果,但是在计算总和时发生的并发更新可能不会被并入。 另外,因为浮点运算并不是严格的关联性,所以返回的结果不一定等于在单个变量的连续序列更新中获得的值。
        结果
        总和
      • reset

        public void reset​()
        将保持总和的变量重置为零。 该方法可能是创建新加法器的有用替代方法,但仅在没有并发更新时才有效。 因为这个方法本质上是racy,所以只有当已知没有线程同时更新时才应该使用它。
      • sumThenReset

        public double sumThenReset​()
        相当于sum()其次是reset() 该方法可以例如在多线程计算之间的静态点期间使用。 如果与此方法同时存在更新,则返回值不能保证是重置前发生的最终值。
        结果
        总和
      • doubleValue

        public double doubleValue​()
        相当于 sum()
        Specified by:
        doubleValueNumber
        结果
        总和
      • longValue

        public long longValue​()
        在缩小原始转换后,返回 sum()作为 long
        Specified by:
        longValueNumber
        结果
        该对象在转换为 long型后表示的数值。
      • intValue

        public int intValue​()
        在缩小原始转换后返回 sum()作为 int
        Specified by:
        intValueNumber
        结果
        在转换为 int类型后由该对象表示的数值。
      • floatValue

        public float floatValue​()
        在缩小原始转换后,返回 sum()作为 float
        Specified by:
        floatValueNumber
        结果
        the numeric value represented by this object after conversion to type float.