如何在其他线程中的其他活动之后关闭我的ExecutorService对象?

时间:2017-07-12 04:28:18

标签: java multithreading executorservice

问题在于,由于方法“process()”需要很长时间才能完成10个线程,所以tt.shutdownService()立即执行。如何确保在其他线程之后执行shutdownService(),即在执行process()之后执行?

public class ThreadTest{

  private ExecturoService service;

  void main(String[] args){
      long startTime = System.currentTimeLillis();

       ThreadTest tt = new ThreadTest();
       tt.process();

       tt.shutdownService();

      long endTime = System.currentTimeLillis();
  }

   public ThreadTest(){
      service = Executors.newFixedThreadPool(10);
   }
   public void process(){
        ...
        service.execute(new Runnable){...}
   }

   public void shutdownService(){
       if(service != null){
           service.shutdown();
           service.awaitTermination(60, TimeUnit.SECONDS);
       }
   }
}

注意,我的实际程序有点复杂。我无法在process()中关闭服务,因为process()将在循环中多次调用。在这里我简化了案例。

2 个答案:

答案 0 :(得分:0)

根据Javadocs

此方法不会等待先前提交的任务完成执行。使用awaitTermination来做到这一点。

答案 1 :(得分:0)

您要找的是awaitTermination。这段代码实际上会等到所有任务完成。或者直到几乎结束时间,无论先发生什么。

executor.awaitTermination(Integer.MAX_VALUE, TimeUnit.SECONDS);