java 中多執行緒池 ExecutorService shutdonw及其多執行緒執行完成判斷
1.線上程池 ExecutorService的使用過程中,主執行緒開啟了多個子執行緒,如果判斷所有子執行緒任務是否完成問題;
方法一:
BusinessHandler b = new BusinessHandler(list);
ExecutorService pool = Executors.newFixedThreadPool(340);
for(int i = 0;i<340;i++){
pool.execute(new ThreadCreat(b));
}
pool.shutdown();
boolean isClose= true;
while(isClose
Thread.sleep(1000);
if(pool.isTerminated()){
System.out.println("-------------已經結束---------");
isClose= false;
}else{
System.out.println(“--------還未結束-----------------");
}
}
在方法一中,每個子執行緒要執行10s , pool.shutdown 會在for結束後立刻執行(毫秒級的執行速度)執行之後ExecutorService 處於shutdonw狀態,此時ExecutorService
方法二:
BusinessHandler b = new BusinessHandler(list);
ExecutorService pool = Executors.newFixedThreadPool(340);
for(int i = 0;i<340;i++){
pool.execute(new ThreadCreat(b));
}
pool.shutdown();
boolean statu= pool.awaitTermination(1, TimeUnit.SECONDS);
while(!
statu= pool.awaitTermination(1, TimeUnit.SECONDS);
Thread.sleep(1000);
System.out.println("-----其實這裡輸出ExecutorService 並非 shutdow狀態,而是Terminated狀態-,子執行緒未結束---------")}
syso("--------------所有任務已經完成----------------")
}
方法二同樣能檢測到所有任務是否完成,