java - 在 Java 中,我应该在 foreach 之前在本地复制一个 volatile 引用吗?

标签 java multithreading foreach volatile

如果我有以下内容

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/

相关文章:

java - 如何避免在 AsyncTask 中传递过多的输入参数?

java - Play Framework 2 设置表单输入类

java - 为什么我的 run() 方法没有从我的 Actionlistener 中正确调用

java - 如何将 for-each 循环应用于字符串中的每个字符?

php - 使用 SimpleXML foreach 循环进行迭代 - 导入矩阵

java - 如何在整数字段上执行 Restrictions.like

java - 使用java泛型来扩展接口(interface)还是只是糟糕的设计?

c# - 通过 Windows 服务启动和停止并发线程

java - 使用多线程读取单个文件 : should speed up?

php - OOP 挑战 如何在 php mysql 结果集中使用 foreach 进行嵌套?