我们知道调用Thread的interrupt方法,并不能真正中断线程,只是给线程做了个中断的状态标记,那么如何中断线程呢?
先看如下的代码:
public class MyThread extends Thread{
@Override
public void run() {
try {
for (int i = 0; i <1000; i++) {
if(this.interrupted()){
System.out.println("线程被标记为中断了!");
throw new InterruptedException();
}
System.out.println("i="+(i+1));
}
System.out.println("线程中断了,那么还会执行到这嘛?");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
在for循环里面,判断线程的中断状态是否为true,如果为true,则抛出异常,从而达到中断线程的执行!
测试一下:
public class Runner {
public static void main(String[] args) {
MyThread myThread = new MyThread();
myThread.start();
myThread.interrupt();
}
}
执行结果如下:
线程被标记为中断了!
java.lang.InterruptedException
at MyThread.run(MyThread.java:11)
所以,中断线程,我们通常的做法就是,当线程被标记为中断状态时,则抛出InterruptException来。从而达到真正的中断目的!