方法一、
使用shutdown方法,該方法會讓線程池不在繼續(xù)接收新的線程,直到?jīng)]有線程后通過循環(huán)判斷是否所有線程都執(zhí)行完畢
public static void main(String[] args) throws ExecutionException, InterruptedException {
ExecutorService exec = Executors.newFixedThreadPool(4);
for (int i = 0;i<10000;i++) {
exec.execute(() -> System.out.println("aaaaaaaaaaaaaaaaaaaaaa"));
}
exec.shutdown();
while(true){
if(exec.isTerminated()){
System.out.println("所有的子線程都結(jié)束了!");
break;
}
Thread.sleep(1000);
}
}
方法二、
通過shutdown將線程池不在接收新的線程,然后使用awaitTermination通過返回值true判斷線程全部執(zhí)行完成
public static void main(String[] args) throws ExecutionException, InterruptedException {
for (int i = 0;i<10000;i++) {
exec.execute(() -> System.out.println("aaaaaaaaaaaaaaaaaaaaaa"));
}
exec.shutdown();
//請求關(guān)閉、發(fā)生超時或者當前線程中斷,無論哪一個首先發(fā)生之后,都將導致阻塞,直到所有任務(wù)完成執(zhí)行。
boolean flag = exec.awaitTermination(1, TimeUnit.MINUTES);
if(flag){
System.out.println("結(jié)束了aaaa");
}
}