您的位置:首页 > 编程语言 > Java开发

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

2016-10-10 16:16 471 查看

shutdown

void shutdown()


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

 抛出:

SecurityException
 - 如果安全管理器存在并且关闭,此 ExecutorService 可能操作某些不允许调用者修改的线程(因为它没有保持
RuntimePermission
("modifyThread")),或者安全管理器的 checkAccess 方法拒绝访问。

isTerminated

boolean isTerminated()

如果关闭后所有任务都已完成,则返回 true。注意,除非首先调用 shutdown 或 shutdownNow,否则 isTerminated 永不为 true。

返回:如果关闭后所有任务都已完成,则返回 true

[java]
view plain
copy
print

 * 采用线程池开启多个子线程,主线程等待所有的子线程执行完毕  
 */  
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("主线程结束");  
    }  
}  

* 采用线程池开启多个子线程,主线程等待所有的子线程执行完毕
*/
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
print

子线程[1]开启  
子线程[6]开启  
子线程[2]开启  
子线程[5]开启  
子线程[9]开启  
已经开启所有的子线程  
子线程[3]开启  
子线程[7]开启  
子线程[10]开启  
shutdown():启动一次顺序关闭,执行以前提交的任务,但不接受新任务。  
子线程[4]开启  
子线程[8]开启  
子线程[6]结束  
子线程[3]结束  
子线程[7]结束  
子线程[2]结束  
子线程[1]结束  
子线程[5]结束  
子线程[9]结束  
子线程[4]结束  
子线程[10]结束  
子线程[8]结束  
所有的子线程都结束了!  
主线程结束  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: