文档章节

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

wclhjs
 wclhjs
发布于 2017/02/13 09:11
字数 501
阅读 64
收藏 0

 

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 原文地址
 

本文转载自:

下一篇: Linux信号详解
wclhjs
粉丝 2
博文 8
码字总数 17619
作品 0
合肥
私信 提问

暂无文章

mysql-connector-java升级到8.0后保存时间到数据库出现了时差

在一个新项目中用到了新版的mysql jdbc 驱动 <dependency>     <groupId>mysql</groupId>     <artifactId>mysql-connector-java</artifactId>     <version>8.0.18</version> ......

ValSong
今天
5
0
Spring Boot 如何部署到 Linux 中的服务

打包完成后的 Spring Boot 程序如何部署到 Linux 上的服务? 你可以参考官方的有关部署 Spring Boot 为 Linux 服务的文档。 文档链接如下: https://docs.ossez.com/spring-boot-docs/docs/r...

honeymoose
今天
6
0
Spring Boot 2 实战:使用 Spring Boot Admin 监控你的应用

1. 前言 生产上对 Web 应用 的监控是十分必要的。我们可以近乎实时来对应用的健康、性能等其他指标进行监控来及时应对一些突发情况。避免一些故障的发生。对于 Spring Boot 应用来说我们可以...

码农小胖哥
今天
9
0
ZetCode 教程翻译计划正式启动 | ApacheCN

原文:ZetCode 协议:CC BY-NC-SA 4.0 欢迎任何人参与和完善:一个人可以走的很快,但是一群人却可以走的更远。 ApacheCN 学习资源 贡献指南 本项目需要校对,欢迎大家提交 Pull Request。 ...

ApacheCN_飞龙
今天
5
0
CSS定位

CSS定位 relative相对定位 absolute绝对定位 fixed和sticky及zIndex relative相对定位 position特性:css position属性用于指定一个元素在文档中的定位方式。top、right、bottom、left属性则...

studywin
今天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部