【发布时间】:2019-10-24 15:42:29
【问题描述】:
我需要主线程等到所有线程池任务完成。怎么做?例如: 我有程序:
public static void main(String[] args){
ExecutorService executor = Executors.newFixedThreadPool(2);
Map<String,String> test = new HashMap<String,String>(){{
put("a","b");
put("c","b");
}};
for(String t: test.keySet()) {
executor.execute(new Runnable() {
public void run() {
for(int i=0;i<100;i++){
System.out.println("t = " + t);
}
}
})
;
}
executor.shutdown();
System.out.println("outside");;
}
在上面的代码中,我想总是在最后打印“outside”,即在 ExecutorService 任务完成之后。
【问题讨论】:
-
executor.awaitTermination? (关机通话后) -
awaitTermination() 期望超时参数,我想在不传递超时值的情况下这样做。有什么解决办法吗?
-
然后以不合理的超时调用它(例如 100 年以毫秒为单位)
-
使用 Callable 而不是 runnable。并使用 get() 或 isDone() 方法阻止。这将阻塞主线程,直到您从线程中获得结果。
标签: java multithreading