interrupt:设置线程的打断标记,线程调用interrupt并不是终止该线程的运行,而是将该线程的打断标记设置为true;该线程在每次执行的时候,判断一下打断标志是否为true,如果为true那么可以终止该线程的运行;
重点:
1、如果线程处于sleep、wait、join的时候调用了interrupt,那么线程会进入InterruptedException异常里面,并会重置线程的打断标记为false;
2、如果线程在正常运行的时候,调用了Interrupt,那么该线程的打断标记变为true,并且不会被重置为false;
isInterrupted:获取该线程的打断标记值,true或者false;
Interrupted:获取该线程的打断标记值,并且会重置值为false;
以下通过代码演示,处于睡眠状态的线程被打断后,会重置打断的标记为false;
package pro01;
public class Test01 {
public static void main(String[] args) throws Exception{
Thread t1 = new Thread( () -> {
System.out.println("t1线程开始执行!!!");
try {
//t1线程睡眠10秒钟
System.out.println("t1线程睡眠10秒钟!!!");
Thread.sleep(10000);
} catch (InterruptedException e) {
System.out.println("t1线程睡眠被打断!!!");
e.printStackTrace();
}
} ,"t1");
//启动t1线程
t1.start();
//主线程睡眠一秒钟
Thread.sleep(1000);
System.out.println("1秒后主线程打断t1线程睡眠");
//打断t1线程睡眠
t1.interrupt();
System.out.println("t1线程打断标记为:"+t1.isInterrupted());
}
}
执行结果:
t1线程开始执行!!!
t1线程睡眠10秒钟!!!
1秒后主线程打断t1线程睡眠
java.lang.InterruptedException: sleep interrupted
at java.lang.Thread.sleep(Native Method)
at pro01.Test01.lambda$0(Test01.java:12)
at java.lang.Thread.run(Thread.java:745)
t1线程睡眠被打断!!!
t1线程打断标记为:false
以下是以上代码的完整截图