首页 > 代码库 > 停止运行ExecutorService中的线程

停止运行ExecutorService中的线程

1 while(true){2                     try {    3                        sleep(1000);4                     } catch (InterruptedException e) {5                         // TODO Auto-generated catch block6                         e.printStackTrace();7                     }8                 }

 

像如上代码,使用ExecutorService对象调用shutdownNow方法或shutdown方法,线程都不会停止。要想停止线程需要改成如下代码:

 1 while (!Thread.interrupted()) { 2  3                      4  5                 try { 6                     sleep(1000); 7                 } catch (InterruptedException e) { 8                     e.printStackTrace(); 9                     //终结循环  10                     Thread.currentThread().interrupt();  11                 }

 

shutdownNow方法与shutdown方法的区别:

 

1、shutdown方法: 这个方法,只能立刻interrupt那些目前没有任务,处于等待状态从blockingQueue获取任务的异常。而不能interrupt那些在任务执行过程中的thread,或者是任务执行过程中挂起的thread。

 

2、shutdownNow方法: 不管任务是否在执行中,一律interrupt,不去判断什么锁不锁。

 

停止运行ExecutorService中的线程