我的问题:如何在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