平时在做线程任务停止的时候,可能很多情况下都是使用一个退出标志,使线程正常退出,也就是run方法完成后线程终止。这里我们说一下使用interrupt()方法来停止线程。
首先,调用interrupt()方法仅仅是在当前线程中打了一个停止的标记状态,并不是真的停止线程,还需要结合线程的interrupted()完成线程的停止。
class MThread extends Thread {
int i = 0;
@Override
public void run() {
super.run();
try {
while (true) {
if (this.interrupted()) {
throw new InterruptedException();
}
//TODO 线程业务逻辑
System.out.print("i=" + (i++));
}
} catch (InterruptedException e) {
e.printStackTrace();
//TODO 处理线程中断
}
}
}
MThread mThread = new MThread();
mThread.start();
mThread.interrupt();
当然也可以使用return;来控制程序的停止,但这里对线程中断的处理就不会像使用“抛异常”法这么的优雅,使用异常流能更好、更方便地控制程序的运行流程。
网友评论