如果我有以下内容
private volatile Collection<Integer> ints;
private void myMethod()
{
for ( Integer i : ints )
{
...
}
}
ints 集合永远不会改变,但整个集合可能会被另一个线程替换(因此它是一个不可变集合)。
我应该在迭代之前在本地复制 ints 变量吗?我不确定它是否会被多次访问。即迭代集合,另一个线程替换集合,代码继续迭代但使用新集合。
编辑:This question与有关 foreach 如何在内部工作的其他信息相关。
最佳答案
你不必。隐含地,该代码无论如何都会执行 ints.iterator()
,并且从那时起仅在旧集合上使用该迭代器。
关于java - 在 Java 中,我应该在 foreach 之前在本地复制一个 volatile 引用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4498149/