Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在其他线程中的其他活动之后关闭ExecutorService对象?_Java_Multithreading_Executorservice - Fatal编程技术网

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

Java 如何在其他线程中的其他活动之后关闭ExecutorService对象?,java,multithreading,executorservice,Java,Multithreading,Executorservice,问题是,由于方法“process()”需要相当长的时间才能用10个线程完成,因此tt.shutdownService()立即被执行。如何确保在其他线程之后执行ShutdowService(),即在执行进程()之后 public class ThreadTest{ private ExecturoService service; void main(String[] args){ long startTime = System.currentTimeLillis();

问题是,由于方法“process()”需要相当长的时间才能用10个线程完成,因此tt.shutdownService()立即被执行。如何确保在其他线程之后执行ShutdowService(),即在执行进程()之后

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()将在循环中被多次调用。在这里,我简化了这个案例。

根据


此方法不会等待以前提交的任务完成执行。使用等待终止来完成此操作。

您要查找的是
等待终止
。此代码实际上将等待所有任务完成。或者直到时间的尽头,不管先发生什么

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

请查看我的添加。@user697911您的添加只会等待60秒,直到您的所有任务都完成为止。在这种情况下,您不需要service.shutdown()语句?如果您不想让
执行器
接受任何新任务,您可以这样做。这就是
service.shutdown()
所做的。请参阅dupe中接受的答案