Foreach循环可以导致线程并发吗?

时间:2014-04-23 16:31:59

标签: java concurrency foreach

我听说你不应该使用foreach循环来避免它,因为它可能导致线程并发,它是什么意思线程并发,它是真的吗?

2 个答案:

答案 0 :(得分:1)

  

So when should you use the for-each loop?

     

任何时候。它真的美化了你的代码。不幸的是,你无法在任何地方使用它。例如,考虑the expurgate method。程序需要访问迭代器才能删除当前元素。 for-each循环隐藏了迭代器,因此您无法调用remove 。因此,for-each循环不可用于过滤。类似地,它不适用于需要在遍历时替换列表或数组中的元素的循环。最后,它不适用于必须并行迭代多个集合的循环

     

设计师知道这些缺点,他们有意识地决定采用干净,简单的结构来覆盖绝大多数情况。

强调我的。

除非你完全清楚你的意思,否则这表明你错了。

答案 1 :(得分:0)

在更改集合时使用for for循环可以触发它错误地检测并发修改,看起来它已被另一个线程修改,而实际上它已被同一个线程修改过。

“for each”与并发无关。你可以通过多种方式找到ConcurrentModicationException,一种是使用Iterator.remove()。