为什么在Atomic {Type} Array构造函数中需要volatileWrite

629

例如,采用java.util.concurrent.atomic.AtomicLongArray的数组大小的构造函数定义如下:

    public AtomicLongArray(int length) {
    array = new long[length];
    // must perform at least one volatile write to conform to JMM
    if (length > 0)
        unsafe.putLongVolatile(array, rawIndex(0), 0);
}

摘自AtomicLongArray.java的代码段

当数组字段为final时,为什么在该构造函数中需要volatileWrite?

斯莱曼·杰尼迪

不需要它,并且此代码行在JDK的更高版本中已删除。

在JDK 1.7和1.8中的外观

public  AtomicLongArray(int length) {
     array = new long[length];
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么在Atomic {Type} Array构造函数中需要volatileWrite

来自分类Dev

为什么在OOP中需要构造函数?

来自分类Dev

为什么需要构造函数?

来自分类Dev

为什么std :: atomic构造函数在C ++ 14和C ++ 17中表现不同

来自分类Dev

为什么需要在构造函数中绑定函数

来自分类Dev

为什么在const成员struct中需要构造函数?

来自分类Dev

为什么需要在构造函数中调用超类?

来自分类Dev

为什么对`--isolatedModules`需要`export type`?

来自分类Dev

为什么需要Content / Type变量?

来自分类Dev

为什么std :: atomic的默认构造函数不默认初始化底层存储值?

来自分类Dev

为什么需要使用type **指向type *?

来自分类Dev

嵌套的构造函数。为什么需要它?

来自分类Dev

嵌套的构造函数。为什么需要它?

来自分类Dev

为什么移动构造函数的成员需要默认构造函数?

来自分类Dev

为什么函数中本地定义的结构需要赋值运算符和复制构造函数

来自分类Dev

为什么bernoulli_distribution :: param_type的构造函数是显式的?

来自分类Dev

为什么bernoulli_distribution :: param_type的构造函数是显式的?

来自分类Dev

为什么不能默认构造std :: chrono time_point成员变量的std :: atomic?

来自分类Dev

为什么在具有主构造函数的记录中需要显式的“ this”构造函数初始化器?

来自分类Dev

如果包装器类已经不可变,为什么我们需要Atomic *类?

来自分类Dev

为什么javascript函数原型需要修复构造函数?

来自分类Dev

为什么转换函数声明不需要至少一个define-type-specifier

来自分类Dev

为什么可以在可重入函数中使用sig_atomic_t

来自分类Dev

为什么我们需要在MSIL中显式调用父构造函数?

来自分类Dev

为什么需要在Swift中为UIViewController子类添加空的构造函数

来自分类Dev

为什么C ++和Java中的构造函数调用需要显式类型参数?

来自分类Dev

为什么我们需要在JavaScript中定义构造函数

来自分类Dev

为什么在这个Java通用子类中需要一个构造函数?

来自分类Dev

为什么在扩展的抽象类中需要另一个构造函数?

Related 相关文章

  1. 1

    为什么在Atomic {Type} Array构造函数中需要volatileWrite

  2. 2

    为什么在OOP中需要构造函数?

  3. 3

    为什么需要构造函数?

  4. 4

    为什么std :: atomic构造函数在C ++ 14和C ++ 17中表现不同

  5. 5

    为什么需要在构造函数中绑定函数

  6. 6

    为什么在const成员struct中需要构造函数?

  7. 7

    为什么需要在构造函数中调用超类?

  8. 8

    为什么对`--isolatedModules`需要`export type`?

  9. 9

    为什么需要Content / Type变量?

  10. 10

    为什么std :: atomic的默认构造函数不默认初始化底层存储值?

  11. 11

    为什么需要使用type **指向type *?

  12. 12

    嵌套的构造函数。为什么需要它?

  13. 13

    嵌套的构造函数。为什么需要它?

  14. 14

    为什么移动构造函数的成员需要默认构造函数?

  15. 15

    为什么函数中本地定义的结构需要赋值运算符和复制构造函数

  16. 16

    为什么bernoulli_distribution :: param_type的构造函数是显式的?

  17. 17

    为什么bernoulli_distribution :: param_type的构造函数是显式的?

  18. 18

    为什么不能默认构造std :: chrono time_point成员变量的std :: atomic?

  19. 19

    为什么在具有主构造函数的记录中需要显式的“ this”构造函数初始化器?

  20. 20

    如果包装器类已经不可变,为什么我们需要Atomic *类?

  21. 21

    为什么javascript函数原型需要修复构造函数?

  22. 22

    为什么转换函数声明不需要至少一个define-type-specifier

  23. 23

    为什么可以在可重入函数中使用sig_atomic_t

  24. 24

    为什么我们需要在MSIL中显式调用父构造函数?

  25. 25

    为什么需要在Swift中为UIViewController子类添加空的构造函数

  26. 26

    为什么C ++和Java中的构造函数调用需要显式类型参数?

  27. 27

    为什么我们需要在JavaScript中定义构造函数

  28. 28

    为什么在这个Java通用子类中需要一个构造函数?

  29. 29

    为什么在扩展的抽象类中需要另一个构造函数?

热门标签

归档