我在读J. Bloch的“Effective Java”,现在我在关于for-each
和for-loop
的部分。他提到的三种情况,我们不能使用for-each
环,其中之一是以下:L多个集合的并行迭代
并行迭代 - 如果你需要在 平行遍历多个集合,然后你在需要显式控制迭代器或索引 变量,以便所有迭代器或索引变量可以在 锁步中前进(如无意中在上面的示例中所示的buggy卡和骰子 中所示)。
这个案例对我来说不是很清楚,我无法想象一个例子。
我脑海中浮现的第一个想法是,它只是在多个线程中迭代相同的集合,但这可能不是他的意思。我没有看到任何限制阻止我们这样做(只读)。其实:
public class MyRunnable implements Runnable{
private Collection<String> col;
//CTOR ommmited
public void run(){
for(String s : col){
//print o, not modify
}
}
然后我们只是用同一个实例启动一些线程。所以,我们并不害怕获得ConcurrentModificationException
(JavaDocs),因为我们执行只读访问,即使是多线程同时执行也是如此。
怎么了?
事实上,听起来很reasonbable。 –
另请参阅https://stackoverflow.com/questions/1365793/how-to-most-elegantly-iterate-through-parallel-collections – JasonPlutext