多线程之中断线程

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);

    ....

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容