Java 如何判断线程池所有任务是否执行完毕
2016-02-01 18:01
696 查看
shutdown
void shutdown()
启动一次顺序关闭,执行以前提交的任务,但不接受新任务。如果已经关闭,则调用没有其他作用。
抛出:
SecurityException- 如果安全管理器存在并且关闭,此 ExecutorService 可能操作某些不允许调用者修改的线程(因为它没有保持
RuntimePermission("modifyThread")),或者安全管理器的 checkAccess 方法拒绝访问。
isTerminated
boolean isTerminated()
如果关闭后所有任务都已完成,则返回 true。注意,除非首先调用 shutdown 或 shutdownNow,否则 isTerminated 永不为 true。
返回:如果关闭后所有任务都已完成,则返回 true
/**
[java] view
plain copy
* 采用线程池开启多个子线程,主线程等待所有的子线程执行完毕
*/
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("主线程结束");
}
}
[java] view
plain copy
子线程[1]开启
子线程[6]开启
子线程[2]开启
子线程[5]开启
子线程[9]开启
已经开启所有的子线程
子线程[3]开启
子线程[7]开启
子线程[10]开启
shutdown():启动一次顺序关闭,执行以前提交的任务,但不接受新任务。
子线程[4]开启
子线程[8]开启
子线程[6]结束
子线程[3]结束
子线程[7]结束
子线程[2]结束
子线程[1]结束
子线程[5]结束
子线程[9]结束
子线程[4]结束
子线程[10]结束
子线程[8]结束
所有的子线程都结束了!
主线程结束
相关文章推荐
- spring mvc重定向方法
- java 分页详细
- MyEclipse 设置屏幕护眼色
- Java线程
- Java初涉之9--二叉树及其前序,中序,后序的JAVA实现
- Java 高级基础
- [Spring实战系列](6)配置Spring IOC容器的Bean
- java 动态代理
- JAVA 实现数据导入Phoenix
- java 内部类和匿名内部类
- 玩转SSH(五):Struts + Spring + MyBatis(注解版)
- Java学习笔记1-多线程
- java 生成随机数字+字母组合 和字母组合
- Java类型转换(int - byte[],float - byte[])
- Eclipse的使用:快捷键、设置、调试
- Java基础知识梳理
- java 深入理解异常处理机制
- 《java设计模式》之工厂模式
- Myeclipse通过表生成实体类和注解
- SpringMVC拦截器(资源和权限管理)