多线程之中断线程

1、 java中没有可以强制线程终止的方法。但是存在interrupt方法用来请求终止线程。当对一个线程调用interrupt方法时,线程的中断状态将被置位。
2、每个线程都存在boolean标志。
3、如果线程被阻塞,就无法检测中断状态。当在一个被阻塞的线程(调用sleep或者wait)上调用interrupt方法时,阻塞调用将会被Interrupted Exception异常中断。
4、如果在每次工作迭代之后调用sleep方法(或者其他的可中断方法),isInterrupted检测既没有必要也没有用处。如果在中断状态被置位时调用sleep方法,它不会休眠。相反,它将会清楚这一状态并抛出InterruptedException。因此,若是循环调用sleep,不会检测中断状态。

Interrupted方法和isInterrupted方法的区别:

1、Interrupted方法是一个静态方法,它检测当前的线程是否被中断,并且会清除该线程的中断状态。
2、isInterrupted方法是一个实例方法,可用来检测是否有线程被中断。但是调用这个方法不会改变中断状态。

在捕获InterruptedException异常应该如何做?

1、在catch子句中调用Thread.currentThread().interrupt()方法来设置中断状态。


void mySubTask(){

...

try{ sleep(delay); }

catch(InterruptedException){Thread.currentThread().interrupt();}

}

2、更好的选择是用throws InterruptedException标记方法,不采用try语句块捕获异常。


void mySubTask() throws InterruptedException{

     ...

     sleep(delay);

    ....

}

你可能感兴趣的:(多线程之中断线程)