并发理论:InterruptedException有啥用?
InterruptedException异常是如何来的InterruptedException中断异常是 Java 多线程编程中最常见的检查型异常之一当线程处于WAITING和TIMED_WAITING状态时如果其他线程调用了该线程的interrupt()方法会抛出InterruptedException阻塞的方法就会立即抛出 InterruptedException并提前结束阻塞ObjectlocknewObject();Threadthread1newThread(()-{synchronized(lock){try{lock.wait();}catch(InterruptedExceptione){// 在这里抛出 InterruptedExceptione.printStackTrace();}}});thread1.start();newThread(()-{thread1.interrupt();}).start();中断状态标志每个线程都有一个内部的布尔标志用于表示其中断状态如果目标线程正处在如下阻塞方法中它会立即清除中断状态并抛出这个异常Thread.sleep(long millis)线程休眠。Object.wait()等待获取对象锁通知。Thread.join()等待另一个线程执行完毕。并发容器的阻塞操作如 BlockingQueue.take()、BlockingQueue.put() 等。显式锁的中断响应如 ReentrantLock.lockInterruptibly()如果目标线程没有在阻塞中interrupt() 仅会将其中断状态设为 true。线程可以通过轮询 Thread.interrupted() 或 Thread.isInterrupted() 方法来检查这个标志并自行决定如何响应Thread类提供了如下2个方法来判断线程是否是中断状态isInterrupted()interrupted()这2个方法虽然都能判断状态但是有细微的差别TestpublicvoidtestInterrupt()throwsInterruptedException{ThreadthreadnewThread(()-{while(true){}});thread.start();TimeUnit.MICROSECONDS.sleep(100);thread.interrupt();// trueSystem.out.println(thread.isInterrupted());// trueSystem.out.println(thread.isInterrupted());// trueSystem.out.println(thread.isInterrupted());}TestpublicvoidtestInterrupt2(){Thread.currentThread().interrupt();// trueSystem.out.println(Thread.interrupted());// falseSystem.out.println(Thread.interrupted());// falseSystem.out.println(Thread.interrupted());}isInterrupted和interrupted的方法区别如下Thread#isInterrupted测试线程是否是中断状态执行后不更改中断状态Thread#interrupted测试线程是否是中断状态执行后将中断标志更改为falseAQS中就有类似的逻辑publicfinalvoidacquireInterruptibly(intarg)throwsInterruptedException{// 1. 前置中断检查若调用前线程已被中断直接抛出异常if(Thread.interrupted())thrownewInterruptedException();// 2. 尝试获取资源由子类实现如 ReentrantLockif(!tryAcquire(arg))// 3. 获取失败入队阻塞且在阻塞期间【强响应中断】doAcquireInterruptibly(arg);}InterruptedException有啥用InterruptedException 的核心设计作用可以概括为一句话为 Java 多线程提供一种“安全、可控、协作式”的取消与停止机制解决强制终止线程的安全隐患在早期 JavaJDK 1.0中Thread.stop() 可以强制直接杀死一个线程。但这带来了严重的系统风险为了解决这个问题Java 废弃了 Thread.stop()转而设计了以 InterruptedException 为核心的协作式中断机制外部只能发出“请停下来”的请求由线程自己决定何时、如何安全地释放资源并退出可以及时打断阻塞状态如果没有中断机制线程将无法感知外部的停止指令会一直卡在阻塞调用处直到等待超时或自然唤醒。这会导致线程池无法关闭、系统响应变慢甚至卡死

相关新闻

AudioLazy实战案例:基于DFT的实时 pitch检测系统

AudioLazy实战案例:基于DFT的实时 pitch检测系统

AudioLazy实战案例:基于DFT的实时 pitch检测系统 【免费下载链接】audiolazy Expressive Digital Signal Processing (DSP) package for Python 项目地址: https://gitcode.com/gh_mirrors/au/audiolazy AudioLazy是一个功能强大的Python数字信号处理&#x…

2026/11/3 10:06:45 阅读更多 →
【 办公类-03】20220220 VS Python 大8班“运动场地”的周次安排。

【 办公类-03】20220220 VS Python 大8班“运动场地”的周次安排。

办公需求: 开学了,周计划教案的模板又要调整了。其中“分散活动”的内容需要按一定排序规律,每周填入不同的场地。 为了避免每个班级每天用的场地产生重复,组长制定了场地安排规则。 以大八班为例, 1.第1周(周一到周五)的场地: “8号对战投投乐”“”1号场地山洞大冒险…

2026/10/22 18:41:12 阅读更多 →
3分钟搞定国家中小学智慧教育平台电子课本:你的免费教材下载神器

3分钟搞定国家中小学智慧教育平台电子课本:你的免费教材下载神器

3分钟搞定国家中小学智慧教育平台电子课本:你的免费教材下载神器 【免费下载链接】tchMaterial-parser 国家中小学智慧教育平台 电子课本下载工具,帮助您从智慧教育平台中获取电子课本的 PDF 文件网址并进行下载,让您更方便地获取课本内容。 …

2026/11/3 2:13:02 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/11/3 1:09:25 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/11/3 10:57:27 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/11/3 11:35:49 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/11/3 2:27:21 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/11/3 10:47:27 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/11/3 10:57:33 阅读更多 →

日新闻

周新闻

月新闻