停止运行ExecutorService中的线程

1 while(true){
2                     try {    
3                        sleep(1000);
4                     } catch (InterruptedException e) {
5                         // TODO Auto-generated catch block
6                         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,不去判断什么锁不锁。

原文地址:https://www.cnblogs.com/l2rf/p/3974861.html