判斷線程池ExecutorService是否有任務正在執行

在開發項目中因爲for循環中的邏輯執行需要很長時間,爲了提高效率使用了多線程,有考慮到如果循環數量過大

每次循環都產生新線程會產生性能問題甚至會服務器崩掉,所以使用了線程池對線程數量進行控制。

但在執行的過程中遇到問題是:子線程還未執行完,主線程就結束了導致。

(爲什麼會這樣呢?是什麼原因造成的呢?按理來說主線程應等待子線程結束後再結束滴吖!!

我在簡單的實例中不會存在這個問題的,但放到項目中就會出現這個問題,如有大神知道望解答。)

上問題解決思路是:怎樣可以判斷線程池中的子線是否有正在執行。

最後在網上找到的判斷方法:

首先調用 shutdown 或 shutdownNow,然後調用isTerminated,返回:如果有任務正在執行,則返回false

//簡單實例如下: 
//線程池,定義10條線程
private static ExecutorService pool = Executors.newFixedThreadPool(10);
public static Result MainExecute() {
	try {
        for (model: list) {
            XXXXXXXXXXXX
			ExecuteProcess process=new ExecuteProcess(kmModel);
			//從線程池中獲取線程對象,然後調用ExecuteProcess中的run()
			pool.submit(process);
    	}
       pool .shutdown();      
      while(true){  
		   if(pool.isTerminated()){  
		     System.out.println("所有的子線程都結束了!");  
		      break;  
		  }  
         Thread.sleep(1000);    
      }  
     } catch (Exception e) { }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章