1. 程式人生 > >Java 如何判斷執行緒池所有任務是否執行完畢

Java 如何判斷執行緒池所有任務是否執行完畢

shutdown

void shutdown()

啟動一次順序關閉,執行以前提交的任務,但不接受新任務。如果已經關閉,則呼叫沒有其他作用。

丟擲:

 - 如果安全管理器存在並且關閉,此 ExecutorService 可能操作某些不允許呼叫者修改的執行緒(因為它沒有保持RuntimePermission("modifyThread")),或者安全管理器的 checkAccess 方法拒絕訪問。

isTerminated

boolean isTerminated()

如果關閉後所有任務都已完成,則返回 true。注意,除非首先呼叫 shutdown 或 shutdownNow,否則 isTerminated 永不為 true。

返回:

如果關閉後所有任務都已完成,則返回 true

/**

	 * 採用執行緒池開啟多個子執行緒,主執行緒等待所有的子執行緒執行完畢
	 */
	public static void moreThread() {
		try {
			int threadNum = 0;
			for (int i = 0; i < 10; i++) {
				threadNum++;
				
				final int currentThreadNum = threadNum;
				exe.execute(new Runnable() {
					
					@Override
					public void run() {
						try {
							System.out.println("子執行緒[" + currentThreadNum + "]開啟");
							Thread.sleep(1000*10);
						} catch (InterruptedException e) {
							e.printStackTrace();
						}finally{
							System.out.println("子執行緒[" + currentThreadNum + "]結束");
						}
					}
				});  
			}
			
			System.out.println("已經開啟所有的子執行緒");
			exe.shutdown();
			System.out.println("shutdown():啟動一次順序關閉,執行以前提交的任務,但不接受新任務。");
			while(true){
				if(exe.isTerminated()){
					System.out.println("所有的子執行緒都結束了!");
					break;
				}
				Thread.sleep(1000);  
			}
			
		} catch (InterruptedException e) {
			e.printStackTrace();
		}finally{
			System.out.println("主執行緒結束");
		}
	}
子執行緒[1]開啟
子執行緒[6]開啟
子執行緒[2]開啟
子執行緒[5]開啟
子執行緒[9]開啟
已經開啟所有的子執行緒
子執行緒[3]開啟
子執行緒[7]開啟
子執行緒[10]開啟
shutdown():啟動一次順序關閉,執行以前提交的任務,但不接受新任務。
子執行緒[4]開啟
子執行緒[8]開啟
子執行緒[6]結束
子執行緒[3]結束
子執行緒[7]結束
子執行緒[2]結束
子執行緒[1]結束
子執行緒[5]結束
子執行緒[9]結束
子執行緒[4]結束
子執行緒[10]結束
子執行緒[8]結束
所有的子執行緒都結束了!
主執行緒結束

借鑑文章地址:

http://blog.csdn.net/truong/article/details/40227435 原文地址

樓主這麼辛苦,請掃一下樓主的支付寶紅包推薦碼吧,記得一定要消費掉哦。雙贏哦。

1、開啟支付寶首頁搜尋“8282987” 立即領紅包。

2、掃碼領紅包。

領支付寶紅包啦

標題。