在学习AQS时,发现其内部有许多地方调用了interrupted()方法,这到底是个啥呢?我们来看一下
其实这是Thread里面的方法:
共有如下三个方法:
interrupt:中断此线程(指调用该方法的Thread实例所代表的线程),实际上只是给线程设置一个中断标志,线程仍会继续运行 interrupted:测试当前线程是否被中断(检查中断标志),返回一个boolean并清除中断状态,第二次再调用时中断状态已经被清除,将返回一个false isInterrupted:只测试此线程是否被中断 ,不清除中断状态
我们通过一个demo来看下:
package com.cjian.JUC;
/**
* @description:
* @author: CJ
* @time: 2021/1/4 17:12
*/
public class InterruptDemo {
public static void main(String[] args) throws InterruptedException {
ThreadDemo myThread=new ThreadDemo();
myThread.start();
myThread.interrupt();
//sleep等待一秒,等myThread运行完
Thread.currentThread().sleep(1000);
System.out.println("myThread线程是否存活:"+myThread.isAlive());
}
static class ThreadDemo extends Thread {
@Override
public void run() {
for (int i = 0; i < 10; i++) {
System.out.println("i="+(i+1));
if(this.isInterrupted()){
System.out.println("通过this.isInterrupted()检测到中断");
System.out.println("第一个interrupted()"+this.interrupted());
System.out.println("第二个interrupted()"+this.interrupted());
break;
}
}
System.out.println("检测到线程为中断状态,线程结束");
}
}
}
运行结果:
i=1
通过this.isInterrupted()检测到中断
第一个interrupted()true
第二个interrupted()false
检测到线程为中断状态,线程结束
myThread线程是否存活:false