- interrupt是Thread类中的方法
- 如果线程单纯的调用这个方法,则只是改变了线程的中断状态,线程还是会往下执行
package com.xd.mythread;
//MyThread 类自己可以定义一下 比较简单
public class MyThreadTest {
public static void main(String[] args) {
MyThread my = new MyThread();
my.start();
System.out.println("我自定义线程中断状态:" + my.isInterrupted());
my.interrupt();
System.out.println("打断后我自定义线程中断状态:" + my.isInterrupted());
}
}
-----输出结果-----
我自定义线程中断状态:false
0
1
2
3
打断后我自定义线程中断状态:true
- 当一个线程调用了sleep、wait、join方法后,这个线程处于阻塞状态,此时再调用interrupt方法会立即打破这种阻塞状态,并抛出InterruptedException异常
package com.xd.mythread;
//创建我的自定义线程
public class MyThread extends Thread{
public void run(){
for (int i = 0; i < 4; i++) {
try {
//线程开始执行 先阻塞 sleep 2秒
Thread.sleep(2000);
} catch (InterruptedException e) {
System.out.println("该阻塞被打断,抛出异常");
}
System.out.println(i);
}
}
}
-----------------------------------------------------------------------------------------
package com.xd.mythread;
//测试方法
public class MyThreadTest {
public static void main(String[] args) {
MyThread my = new MyThread();
my.start();
System.out.println("我自定义线程中断状态:" + my.isInterrupted());
my.interrupt();
System.out.println("打断后我自定义线程中断状态:" + my.isInterrupted());
}
}
-----输出结果-----
我自定义线程中断状态:false
打断后我自定义线程中断状态:true
该阻塞被打断,抛出异常
0
1
2
3
- 当一个线程调用了interrupt方法,然后在执行线程体过程的某一处调用了sleep、wait、join方法,那么立即抛出InterruptedException异常(表示立即打断阻塞)继续往下执行
package com.xd.mythread;
//创建我的自定义线程
public class MyThread extends Thread{
public void run(){
for (int i = 0; i < 4; i++) {
try {
if(i==3){
Thread.sleep(2000);
}
} catch (InterruptedException e) {
System.out.println("一开始没有被阻塞,直到遇到了sleep,被阻塞但是立即被打断并抛出异常");
}
System.out.println(i);
}
}
}
-----------------------------------------------------------------------------------------
package com.xd.mythread;
//测试方法
public class MyThreadTest {
public static void main(String[] args) {
MyThread my = new MyThread();
my.start();
System.out.println("我自定义线程中断状态:" + my.isInterrupted());
my.interrupt();
System.out.println("打断后我自定义线程中断状态:" + my.isInterrupted());
}
}
-----输出结果-----
我自定义线程中断状态:false
0
1
2
打断后我自定义线程中断状态:true
一开始没有被阻塞,直到遇到了sleep,被阻塞但是立即被打断并抛出异常
3
- 理解这个中断方法:中断是去中断线程的阻塞状态,而不是中断线程的执行