如果我有以下内容

private volatile Collection<Integer> ints;

private void myMethod()
{
   for ( Integer i : ints )
   {
      ...
   }
}

ints集合永远不会改变,但是整个集合可能会被另一个线程替换(因此这是一个不可变的集合)。

我应该在迭代之前在本地复制ints变量吗?我不确定是否会多次访问它。即迭代集合,另一个线程替换集合,代码继续迭代,但是使用新集合。

编辑:This question与有关foreach内部工作方式的其他信息有关。

最佳答案

不用了隐式地,该代码无论如何都会执行ints.iterator(),从那时起,仅在旧集合上使用该迭代器。

关于java - 在Java中,我应该先编写 volatile 引用,然后再进行本地化,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4498149/

10-10 08:38