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

Why is volatileWrite necessary inside Atomic{Type}Array constructor

例如,数组大小为 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];
}