问题在于,由于方法“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()将在循环中多次调用。在这里我简化了案例。
答案 0 :(得分:0)
根据Javadocs
此方法不会等待先前提交的任务完成执行。使用awaitTermination来做到这一点。
答案 1 :(得分:0)
您要找的是awaitTermination
。这段代码实际上会等到所有任务完成。或者直到几乎结束时间,无论先发生什么。
executor.awaitTermination(Integer.MAX_VALUE, TimeUnit.SECONDS);