1. 程式人生 > >java 中多執行緒池 ExecutorService shutdonw及其多執行緒執行完成判斷

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

不在接受任務任務,而子執行緒並未結束。下面的 while 迴圈中 pool.isTerminated() 為真的時候,所有執行緒執行結束,主執行緒繼續往下走;

方法二:

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){

statu= pool.awaitTermination(1, TimeUnit.SECONDS);

Thread.sleep(1000);

System.out.println("-----其實這裡輸出ExecutorService 並非 shutdow狀態,而是Terminated狀態-,子執行緒未結束---------"

}

syso("--------------所有任務已經完成----------------")

   }     

方法二同樣能檢測到所有任務是否完成,