如何等待ExecutorService完成而不关机?

时间:2015-09-18 16:13:12

标签: java multithreading

我在ExecutorService中有一些Runnable,并希望在以下后加入线程:

private void foo() {
  //...
  exec.execute(new Runnable(){
    public void run() {
      if (bar()) {
        foo();
      }
    }
  });
}

// exec.shutdown() //exec.awaitTermination();

因为它在Runnable中调用自身,所以我不能只关闭它,因为它可能会阻止自己创建新任务。

如何在不关机的情况下等待所有线程完成?而且任务不会返回未来,所以我也不能使用Future::get()

1 个答案:

答案 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();