中断线程

线程在它的run方法返回时终止。在JDK1.0中,还存在一个stop方法,其他线程可以调用它来终止线程。不过这个方法已经被启用了。
尽管现在没有强制终止线程的方法了,但我们可以通过调用线程的interrupt方法来请求终止一个线程。
当调用interrupt方法时,线程的 中断状态(interrup status) 将会被置为。

我们可以在run方法中不断检查线程中断状态是否被被置位来确定是否要终止线程运行,代码模式如下:

检查中断状态
while(!Thread.currentThread().isInterrupted() && more work to do){ // do more work }

需要注意的是一个被阻塞(sleep或wait)的线程是无法检查中断状态的,但我们可以通过捕获InterruptedException来处理中断。代码模式如下:

检查中断
public void run(){ try{ .... while(!Thread.currentThread().isInterrupted() && more work to do){ // do more work } }catch(InterruptedException ex){ }finally{ // cleanup,if required } }

注意:当sleep方法抛出一个InterruptedException异常时,他同时也会清除中断状态

Thread类有两个类似方法来检查线程中断状态。

  • 一个是静态方法interrupted(),该方法调用会产生副作用,他会将当前线程的中断状态状态设置为false。

  • 另一个是实例方法isInterrupted(),这个方法调用不会改变线程的中断状态。


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!