我已经声明了基于节点的数据结构的易失性数组。
volatile Node[] name;
在大多数情况下,我不需要每个单独的节点都是易失性的,因为我需要在需要更新时更新整个数组。
name = new array of nodes;
很少,我需要更新阵列特定节点内的字段,但是其他线程不需要读取此字段至少几分钟。我可以假设,在这一点上,我所做的任何改变都会对其他线程可见吗?
答案 0 :(得分:1)
在您描述的情况下,volatile
上的name
关键字根本无法发挥作用。您对volatile
的使用仅与name
的读取和写入相关,在访问name
中某些元素的某些字段时都不会这样做。
如果您需要在name
的某个元素中的某些字段上阅读保证,则您确实需要那个字段volatile
。
答案 1 :(得分:0)
在这种情况下,volatile仅指对数组的引用,而不是对其项目的引用 当(如你所说)没有其他线程需要读取该字段至少几分钟时风险很小,但仍然存在