在開發項目中因爲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) { }
}