停止运行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,不去判断什么锁不锁。

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM