裏面foreach循環我調用一個方法:的foreach循環到下一個迭代,而不waitng爲當前迭代
for (Iterable pl : ilist) {
myMethod();
}
myMethod的()可能需要很長的時間currennt(如幾分鐘或幾天)P1的對象,但即使我正在執行下一次迭代(這可以稱爲異步調用,據我所知)
這是甚至可能與一個foreach循環?
裏面foreach循環我調用一個方法:的foreach循環到下一個迭代,而不waitng爲當前迭代
for (Iterable pl : ilist) {
myMethod();
}
myMethod的()可能需要很長的時間currennt(如幾分鐘或幾天)P1的對象,但即使我正在執行下一次迭代(這可以稱爲異步調用,據我所知)
這是甚至可能與一個foreach循環?
所有你需要做的是爲你的循環的每次迭代產生一個新的Thread
。我可能會這樣做。
for (/* whatever */) {
new Thread() {
public void run() {
myMethod();
}
}.start();
}
保持簡單的方法。 我喜歡那樣! – SoulMagnet
如果您想要將這些任務安排爲異步完成,您可以創建一個新的Runnable並將其交給ExecutorService以在另一個線程上運行該操作。現在您需要知道如何處理此任務的結果。
// ExecutorService Thread Pool with 10 threads
ExecutorService executor = Executors.newFixedThreadPool(10);
public void iterate(Collection<?> collection) {
for (Object o : collection) {
executor.execute(createTask(o));
}
}
public Runnable createTask(final Object o) {
return new Runnable() {
public void run() {
// do task.
}
};
}
你會想看看Callable和Future來獲得更多的複雜性。
酷和複雜的解決方案。 但爲什麼不實施大衛華萊士的解決方案? 我想保持簡單! – SoulMagnet
@SoulMagnet ExecutorService在剛開始線程上的使用有很多。首先,使用ExecutorService可以管理線程的行爲。您可以保留一個對大小和執行行爲有限制的線程池,並且可以更輕鬆地控制線程生命週期行爲。如果沒有線程池來管理這種行爲,則會給開發人員帶來更大的負擔來管理每個線程。我提供的例子不是從體系結構角度管理應用程序中的線程的* best *方法,但它確實演示瞭如何使用ExecutorService。 – codethulhu
不,這是不可能的。你可以在這裏使用線程IMO。或者等待Java-8,這將允許並行流式迭代。 –