我的問題:如何在ThreadPoolExecutor
上執行一堆線程對象並等待它們全部完成後才能繼續?如何等待ThreadPoolExecutor完成
我是ThreadPoolExecutor的新手。所以這段代碼是一個測試它是如何工作的。現在我甚至沒有填寫對象BlockingQueue
,因爲我不知道如何在不調用與另一個RunnableObject
的情況下啓動隊列。無論如何,現在我只需撥打awaitTermination()
,但我認爲我仍然錯過了一些東西。任何提示都會很棒!謝謝。
public void testThreadPoolExecutor() throws InterruptedException {
int limit = 20;
BlockingQueue q = new ArrayBlockingQueue(limit);
ThreadPoolExecutor ex = new ThreadPoolExecutor(limit, limit, 20, TimeUnit.SECONDS, q);
for (int i = 0; i < limit; i++) {
ex.execute(new RunnableObject(i + 1));
}
ex.awaitTermination(2, TimeUnit.SECONDS);
System.out.println("finished");
}
的RunnableObject類:
package playground;
public class RunnableObject implements Runnable {
private final int id;
public RunnableObject(int id) {
this.id = id;
}
@Override
public void run() {
System.out.println("ID: " + id + " started");
try {
Thread.sleep(2354);
} catch (InterruptedException ignore) {
}
System.out.println("ID: " + id + " ended");
}
}
,我不認爲這是一個好主意,回答你的問題,你張貼和建議後,立即您自己的答案不太合適。充其量,這保證和更新你的原始問題,解釋爲什麼這個答案是不夠的。 – Kiril
@Link,你是對的。我會解決它。 – kentcdodds
我剛剛編輯了我的答案,以顯示在關閉執行程序之前等待所有作業完成的一種方式。 – Gray