详解java中的中断机制
创始人
2024-12-27 22:22:45
0次

java 中断api

interrupt()

interrupt()方法本质上就是通过调用java.lang.Thread#interrupt0设置中断flag为true,如下代码演示了该方法的使用: 另启一个线程中断了当前线程。

@Test
public void interruptSt() {
 Thread mainThread = Thread.currentThread();
 new Thread(/*将当前线程中断*/mainThread::interrupt).start();
 try {
 //public static native void sleep(long millis) throws InterruptedException;
 Thread.sleep(1_000);
 } catch (InterruptedException e) {
 System.out.println("main 线程被中断了");
 }
 /*
 * 输出: main 线程被中断了
 */
}

interrupted()和isInterrupted()

public boolean isInterrupted() {
 // 设置this线程的中断flag,不会重置中断flag为true
 return isInterrupted(false);
}
public /*静态方法*/static boolean interrupted() {
 // 设置当前线程的中断flag,重置中断flag为true
 return currentThread().isInterrupted(true);
}

使用示例

@Test
public void test_Flag() {
 Thread currentThread = Thread.currentThread();
 currentThread.interrupt();
 System.out.println("当前线程状态 =" + currentThread.isInterrupted());
 System.out.println("当前线程状态 =" + Thread.interrupted());
 System.out.println("当前线程状态 =" + Thread.interrupted());
 /* 输出
 当前线程状态 =true
 当前线程状态 =true
 当前线程状态 =false*/
}

三、如何响应中断?

调用一个可中断的阻塞方法时需要处理受检异常InterruptException,一般来说最容易的方式就是继续抛出InterruptException ,让调用方决定对中断事件作出什么应对。但是对于一些不能在方法头直接添加异常声明的,可以catch出后再进行一些操作,例如使用Runnable时:

详解java中的中断机制

一般来说当catch到中断时,应该对中断状态进行还原: 调用Thread.currentThread().interrupt();,除非明确自己的操作不会丢失线程中断的证据,从而剥夺了上层栈的代码处理中断的机会。

总结

对目标线程调用interrupt()方法可以请求中断一个线程,目标线程通过检测isInterrupted()标志获取自身是否已中断。如果目标线程处于阻塞状态,该线程会捕获到InterruptedException。一般来说不要catchInterruptException后不做处理(“生吞中断”)。

相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...