java-stale对atomicintegerarray的引用是否可能?

java-stale对atomicintegerarray的引用是否可能?,java,atomic,Java,Atomic,在多线程环境中,将AtomicIntegerArray的新实例分配给变量时会发生什么 AtomicIntegerArray array = new AtomicIntegerArray(...); do some stuff array = new AtomicIntegerArray(...); 在新的分配之后,某些线程是否仍然可以访问旧实例的过时引用?如果是这样,我是否也需要将原子数组声明为volatile?如果其他线程(例如类成员变量)可以看到array,那么是的,它也需要是volati

在多线程环境中,将AtomicIntegerArray的新实例分配给变量时会发生什么

AtomicIntegerArray array = new AtomicIntegerArray(...);
do some stuff
array = new AtomicIntegerArray(...);

在新的分配之后,某些线程是否仍然可以访问旧实例的过时引用?如果是这样,我是否也需要将原子数组声明为volatile?

如果其他线程(例如类成员变量)可以看到
array
,那么是的,它也需要是volatile

您的
数组
变量似乎是一个局部变量,根据定义,多个线程无法访问该变量


但是,如果它确实是一个实例变量,那么是的,其他线程可以看到过时的值,就像它们可以看到任何其他实例变量一样。实例变量引用的内容不会影响如何访问该实例变量。

该代码是否在方法中?或者是字段声明它是字段声明。在以后的某个时候,我可能需要更改数组的长度,因此需要一个新的大小的新实例。@lgp,您误解了AtomicIntegerArray的语义。它不维护对原始数组的引用。请看@Dilum,您指的是什么原始数组?我没有使用原始整数数组来构造原子整数数组。@牧师,这不是重点。这里的要点是,现在有一个新的AtomicIntegerArray实例,一些线程将使用它,而其他一些线程可能继续使用旧的instance.Yep。点不是访问数组的某些元素,而是访问字段引用本身。原子类本身不能保证它们的引用永远不会过时(应该如何工作?)-在这种情况下,volatile是非常必要的。