我在讀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