1. 程式人生 > >Java線程池關閉1-shutdown和isTerminated<轉>

Java線程池關閉1-shutdown和isTerminated<轉>

ride shu csdn nat err interrupt .net fin cat

shutdown
void shutdown()
啟動一次順序關閉,執行以前提交的任務,但不接受新任務。若已經關閉,則調用沒有其他作用。
拋出:SecurityException - 如果安全管理器存在並且關閉,此 ExecutorService 可能操作某些不允許調用者修改的線程(因為它沒有保持RuntimePermission("modifyThread")),或者安全管理器的 checkAccess 方法拒絕訪問。


isTerminated
boolean isTerminated()
若關閉後所有任務都已完成,則返回true。註意除非首先調用shutdown或shutdownNow,否則isTerminated永不為true。返回:若關閉後所有任務都已完成,則返回true。

[java] view plain copy print?
  1. public static void moreThread() {
  2. try {
  3. int threadNum = 0;
  4. for (int i = 0; i < 10; i++) {
  5. threadNum++;
  6. final int currentThreadNum = threadNum;
  7. exe.execute(new Runnable() {
  8. @Override
  9. public void run() {
  10. try {
  11. System.out.println("子線程[" + currentThreadNum + "]開啟");
  12. Thread.sleep(1000*10);
  13. } catch (InterruptedException e) {
  14. e.printStackTrace();
  15. }finally{
  16. System.out.println("子線程[" + currentThreadNum + "]結束");
  17. }
  18. }
  19. });
  20. }
  21. System.out.println("已經開啟所有的子線程");
  22. exe.shutdown();
  23. System.out.println("shutdown():啟動一次順序關閉,執行以前提交的任務,但不接受新任務。");
  24. while(true){
  25. if(exe.isTerminated()){
  26. System.out.println("所有的子線程都結束了!");
  27. break;
  28. }
  29. Thread.sleep(1000);
  30. }
  31. } catch (InterruptedException e) {
  32. e.printStackTrace();
  33. }finally{
  34. System.out.println("主線程結束");
  35. }
  36. }

[html] view plain copy print?
  1. 子線程[1]開啟
  2. 子線程[6]開啟
  3. 子線程[2]開啟
  4. 子線程[5]開啟
  5. 子線程[9]開啟
  6. 已經開啟所有的子線程
  7. 子線程[3]開啟
  8. 子線程[7]開啟
  9. 子線程[10]開啟
  10. shutdown():啟動一次順序關閉,執行以前提交的任務,但不接受新任務。
  11. 子線程[4]開啟
  12. 子線程[8]開啟
  13. 子線程[6]結束
  14. 子線程[3]結束
  15. 子線程[7]結束
  16. 子線程[2]結束
  17. 子線程[1]結束
  18. 子線程[5]結束
  19. 子線程[9]結束
  20. 子線程[4]結束
  21. 子線程[10]結束
  22. 子線程[8]結束
  23. 所有的子線程都結束了!
  24. 主線程結束


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

Java線程池關閉1-shutdown和isTerminated<轉>