易变的节点阵列

时间:2011-07-10 21:13:43

标签: java arrays volatile

我已经声明了基于节点的数据结构的易失性数组。

volatile Node[] name;

在大多数情况下,我不需要每个单独的节点都是易失性的,因为我需要在需要更新时更新整个数组。

name = new array of nodes;

很少,我需要更新阵列特定节点内的字段,但是其他线程不需要读取此字段至少几分钟。我可以假设,在这一点上,我所做的任何改变都会对其他线程可见吗?

2 个答案:

答案 0 :(得分:1)

在您描述的情况下,volatile上的name关键字根本无法发挥作用。您对volatile的使用仅与name的读取和写入相关,在访问name中某些元素的某些字段时都不会这样做。

如果您需要在name的某个元素中的某些字段上阅读保证,则您确实需要那个字段volatile

答案 1 :(得分:0)

在这种情况下,volatile仅指对数组的引用,而不是对其项目的引用 当(如你所说)没有其他线程需要读取该字段至少几分钟时风险很小,但仍然存在