Java 如何在其他线程中的其他活动之后关闭ExecutorService对象?
问题是,由于方法“process()”需要相当长的时间才能用10个线程完成,因此tt.shutdownService()立即被执行。如何确保在其他线程之后执行ShutdowService(),即在执行进程()之后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();
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中接受的答案