如果我有以下内容
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/