我在ExecutorService中有一些Runnable
,并希望在以下后加入线程:
private void foo() {
//...
exec.execute(new Runnable(){
public void run() {
if (bar()) {
foo();
}
}
});
}
// exec.shutdown() //exec.awaitTermination();
因为它在Runnable中调用自身,所以我不能只关闭它,因为它可能会阻止自己创建新任务。
如何在不关机的情况下等待所有线程完成?而且任务不会返回未来,所以我也不能使用Future::get()
。
答案 0 :(得分:4)
Executor.submit(Runnable)将根据javadoc返回Future
:
未来的get方法将在成功完成后返回null。
所以你仍然可以调用future.get()
并让它阻止,直到任务完成。
Future<?> future = exec.submit(new Runnable(){
public void run() {
if (bar()) {
foo();
}
}
});
//blocks
future.get();