Java如何判断线程池所有任务是否执行完毕?
2016-11-17 17:19
633 查看
shutdown
void shutdown()
启动一次顺序关闭,执行以前提交的任务,但不接受新任务。如果已经关闭,则调用没有其他作用。
抛出:
SecurityException- 如果安全管理器存在并且关闭,此 ExecutorService 可能操作某些不允许调用者修改的线程(因为它没有保持
RuntimePermission("modifyThread")),或者安全管理器的 checkAccess 方法拒绝访问。
isTerminated
boolean isTerminated()
如果关闭后所有任务都已完成,则返回 true。注意,除非首先调用 shutdown 或 shutdownNow,否则 isTerminated 永不为 true。
返回:
如果关闭后所有任务都已完成,则返回 true
实例一:
package javatest.executorservicetest.executorservicetest1; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; /** * Java如何判断线程池所有任务是否执行完毕? * * Created by Lovell on 17/11/2016. */ /* @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@ @@ @@ @@@@ @@@@ @@@@@@@@ @@@@ @@ @@@ @@@ @@@@ @@@ @@ @@@@ @@ @@@@ @@@ @@@@ @@@@ @@ @@@@ @@ @@@ @@@ @@@@ @@ @@ @@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ */ public class ExecutorServiceTest { public static void main(String args[]) throws InterruptedException { ExecutorService exe = Executors.newFixedThreadPool(50); for (int i = 1; i <= 5; i++) { exe.execute(new SubThread(i)); } // 关闭线程池 exe.shutdown(); // 该方法在加入线程队列的线程执行完之前不会执行 while (true) { // 所有任务全部执行终止 if (exe.isTerminated()) { // 当shutdown()或者shutdownNow()执行了之后才会执行,并返回true。 System.out.println("结束了!"); break; } Thread.sleep(200); } } }
结果:
1
2
3
4
5
结束了!
实例二:
package javatest.executorservicetest.executorsevicetest2; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; /** * Created by Lovell on 17/11/2016. */ /* @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@ @@ @@ @@@@ @@@@ @@@@@@@@ @@@@ @@ @@@ @@@ @@@@ @@@ @@ @@@@ @@ @@@@ @@@ @@@@ @@@@ @@ @@@@ @@ @@@ @@@ @@@@ @@ @@ @@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ */ public class ExecutorServiceTest2 { public static void moreThread() { ExecutorService exe = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors() * 2 + 1); 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 main(String[] args) { moreThread(); } }
结果:
子线程[1]开启
子线程[2]开启
子线程[3]开启
子线程[4]开启
子线程[5]开启
子线程[6]开启
子线程[7]开启
子线程[8]开启
子线程[9]开启
已经开启所有的子线程
shutdown():启动一次顺序关闭,执行以前提交的任务,但不接受新任务。
子线程[1]结束
子线程[3]结束
子线程[10]开启
子线程[2]结束
子线程[4]结束
子线程[5]结束
子线程[7]结束
子线程[8]结束
子线程[6]结束
子线程[9]结束
子线程[10]结束
所有的子线程都结束了!
主线程结束
参考:http://blog.csdn.net/truong/article/details/40227435
http://blog.csdn.net/lisheng19870305/article/details/44747741
相关文章推荐
- Java如何判断线程池所有任务是否执行完毕
- Java如何判断线程池所有任务是否执行完毕
- Java 如何判断线程池所有任务是否执行完毕
- 方法一 Java如何判断线程池所有任务是否执行完毕
- Java 如何判断线程池所有任务是否执行完毕
- Java如何判断线程池所有任务是否执行完毕
- Java如何判断线程池所有任务是否执行完毕
- Java 如何判断线程池所有任务是否执行完毕
- Java如何判断线程池所有任务是否执行完毕
- Java如何判断线程池所有任务是否执行完毕
- Java如何判断线程池所有任务是否执行完毕
- Java 如何判断线程池所有任务是否执行完毕
- Java如何判断线程池所有任务是否执行完毕
- Java 如何判断线程池所有任务是否执行完毕
- Java如何判断线程池所有任务是否执行完毕
- Java 如何判断线程池所有任务是否执行完毕
- Java_判断线程池所有任务是否执行完毕
- Java判断线程池所有任务是否执行完毕
- Java如何判断线程池中所有任务执行完毕
- 如何判断页面是否加载完毕了,再执行