中断线程

来源:互联网 发布:如何修改淘宝店名 编辑:程序博客网 时间:2024/06/10 04:15

检查线程中断状态

每一个线程都有一个记录该线程中断状态的标记位,这是一个 boolean 标记。每个线程都应该不时地检查这个标记位以确定线程是否已经被中断。

调用 interrupt 方法可以请求终止线程,也就是将成功调用 interrupt 方法的线程的中断标记位置为 true。

如果我们想知道线程是否被置位,应该操作:

① 调用静态的 Thread.currentThread 方法获得当前线程

② 调用 isInterrupt 方法检查标记位

while(!Thread.currentThread().isInterrupt()){}

处于阻塞状态的线程,无法检查它的中断状态。如果试图检查阻塞线程的中断状态就会产生 InterruptedException 异常


interrupted 和 isInterrupted

有两个非常类似的方法 interruptedisInterrupted, (interrupted 区别于interrupt方法,interrupt方法用来请求中断)

interrupted 方法是一个静态方法,它检测当前的线程是否被中断,而且调用 interrupted 方法后会清除该线程的中断状态,将当前线程中断状态位置为 false

isInterrupted 方法是一个实例方法,可以用来检测是否有线程被中断,调用这个方法不会改变线程的中断状态


不要忽略 InterruptedException

有两种方法处理 InterruptedException

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

void Test(){    ...    try { sleep(delay); }    catch (InterruptedException e) { Thread.currentThread().interrupt(); } }

2. 用 throws InterruptedException 标记方法

void Test() throws InterruptedException{    ...    sleep(delay);    ...}
原创粉丝点击