为什么 AtomicIntegerArray 的 array 成员不是 volatile 而是 final 的啊?
資深大佬 : amiwrong123 5
对比两个原子类:
public class AtomicIntegerArray implements java.io.Serializable { private final int[] array; public final int get(int i) { return getRaw(checkedByteOffset(i)); } private int getRaw(long offset) { return unsafe.getIntVolatile(array, offset); }
public class AtomicStampedReference<V> { private static class Pair<T> { final T reference; final int stamp; private Pair(T reference, int stamp) { this.reference = reference; this.stamp = stamp; } static <T> Pair<T> of(T reference, int stamp) { return new Pair<T>(reference, stamp); } } private volatile Pair<V> pair; public V getReference() { return pair.reference; } public int getStamp() { return pair.stamp; }
第一个问题就是:为什么 AtomicIntegerArray 的 array 成员不是 volatile 而是 final 的啊?为啥这么设计啊
第二个问题就是:为什么 AtomicIntegerArray 的 get 函数不能像 AtomicStampedReference 一样实现呢?是因为成员不是 volatile 的呗。直接像下面这样实现,不行吗。如果改成 private volatile int[] array;,是不是就可以了?
public final int get(int i) { return array[i]; //类似 pair.reference; }
各位大佬,求解答啊
大佬有話說 (7)