在项目中有这样的业务场景:调度中心终止客户端正在执行的任务。实质是一个线程终止另一个线程。
我的做法是在主线程调用另外一个线程的interrupt方法,被终止的线程在一个循环中处理业务逻辑,由于使用interrupt方法并不会马上终止,所以在每次循环开始前判断线程终止状态,如:
但是发现Thread.currentThread().isInterrupted()一直返回false,查找资料才知道,被终止的线程接收到终止信号后抛出InterruptedException异常,并且终止状态会被清除,所以要在程序中使用isInterrupted方法还要在InterruptedException处理异常的地方调用interrupt方法恢复状态,这样isInterrupted才会返回true,如:
执行结果:
参考资料
http://www.javaspecialists.eu/archive/Issue056.html
https://www.ibm.com/developerworks/cn/java/j-jtp05236.html#ibm-pcon