尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
并发理论: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 为核心的协作式中断机制外部只能发出“请停下来”的请求由线程自己决定何时、如何安全地释放资源并退出可以及时打断阻塞状态如果没有中断机制线程将无法感知外部的停止指令会一直卡在阻塞调用处直到等待超时或自然唤醒。这会导致线程池无法关闭、系统响应变慢甚至卡死
RELATED

相关推荐

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/8/22 20:27:41
【 办公类-03】20220220 VS Python 大8班“运动场地”的周次安排。

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

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

📅 2026/9/5 0:29:16
深入解析μDMA:嵌入式系统数据搬运性能优化的核心技术

深入解析μDMA:嵌入式系统数据搬运性能优化的核心技术

1. 项目概述在嵌入式系统开发中,尤其是面对实时数据采集、高速通信或图形处理等场景时,一个核心的瓶颈往往不是处理器的计算能力,而是数据搬运的效率。想象一下,你的微控制器(MCU)正在全速处理一个复杂的算…

📅 2026/8/22 20:27:42
MORE NEWS

更多资讯

📰

AI时代开发者转型指南:从代码工人到AI架构师

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

JuiceFS vs. Amazon S3 Files:从架构、性能到成本的对象存储文件系统方案对比

JuiceFS vs. Amazon S3 Files:从架构、性能到成本的对象存储文件系统方案对比 【免费下载链接】juicefs JuiceFS is a distributed POSIX file system built on top of Redis and S3. 项目地址: https://gitcode.com/GitHub_Trending/ju/juicefs 导读 本文基…

📰

从零实现基于Raft的KV存储:日志存储、选举与复制实战

简介:一套基于Raft算法的分布式键值存储系统完整实现,面向分布式系统初学者、计算机专业学生及需要设计与实现一致性服务的开发者。项目以Java为主要语言,通过Raft协议保障节点间日志一致与高可用,覆盖领导者选举、日志复制、成员…

📰

混凝土企业ERP选型避坑指南:从业务全貌到落地细节

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

Quick Reference 中的 Adobe Premiere Pro 键盘快捷键速查:按菜单与面板组织的完整清单

Quick Reference 中的 Adobe Premiere Pro 键盘快捷键速查:按菜单与面板组织的完整清单 【免费下载链接】reference 面向开发者的技术速查清单(Cheat Sheets)集合,整理常见技术、工具与开发流程,帮助快速查阅关键信息&…

📰

Java EE项目源码解析:Maven工程与Servlet三层架构实践

简介:面向Java EE开发者的Qimo项目设计源码,涵盖完整的企业级Web应用工程,适合正在学习Java EE、准备课程设计或希望了解项目整体架构的开发者。压缩包共185个文件,大小11.55MB,主要包含53个Java源文件、73个JPG图片、…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬