package com.che.thread.interrupt;
/**
* @author cheyuhang on 2021/12/22
* 如果一个线程处于了阻塞状态(如线程调用了thread.sleep、thread.join、thread.wait、1.5中的condition.await、
* 以及可中断的通道上的 I/O 操作方法后可进入阻塞状态)
*
* 注意线程使用join方法时,阻塞的不是调用方,而是另一方,因此使用interrupt进行打断阻塞线程时,应是另一方调用interrupt方法
*/
public class ThreadInterrupt {
public static void main(String[] args) throws InterruptedException {
Thread thread = new Thread(() -> {
while (true) {
System.out.println("aa");
try {
Thread.sleep(1000);
} catch (Exception e) {
System.out.println("线程被打断了");
e.printStackTrace();
}
}
});
thread.start();
thread.interrupt(); //其作用是中断阻塞的线程,如果异常被捕获的话,线程仍会继续运行,否则线程就退出了。
System.out.println("第一次调用thread.isInterrupted():"+thread.isInterrupted());//作用是只测试调用方法的线程是否被中断 ,不清除中断状态。
System.out.println("第二次调用thread.isInterrupted():"+thread.isInterrupted());
System.out.println("第一次调用thread.interrupted():"+Thread.interrupted()); //看源码可知作用是测试当前线程(此处是main线程)是否被中断(检查中断标志),返回一个boolean并清除中断状态,第二次再调用时中断状态已经被清除,将返回一个false。
System.out.println("第二次调用thread.interrupted():"+Thread.interrupted());
}
}
Java多线程-打断(interrupt)
最新推荐文章于 2022-11-08 10:53:59 发布