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