码迷,mamicode.com
首页 > 编程语言 > 详细

Java 如何判断线程池所有任务是否执行完毕

时间:2015-03-30 11:20:17      阅读:147      评论:0      收藏:0      [点我收藏+]

标签:线程池   java   线程   

shutdown

void shutdown()
启动一次顺序关闭,执行以前提交的任务,但不接受新任务。如果已经关闭,则调用没有其他作用。

抛出:
SecurityException - 如果安全管理器存在并且关闭,此 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 原文地址




Java 如何判断线程池所有任务是否执行完毕

标签:线程池   java   线程   

原文地址:http://blog.csdn.net/lisheng19870305/article/details/44747741

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!