新闻中心

j*a interrupt()打断阻塞的操作

2025-12-05
浏览次数:
返回列表
interrupt() 不会强制终止线程,而是通过设置中断标志并触发可中断阻塞方法抛出 InterruptedException 来实现协作式中断,仅对 sleep、wait、join、LockSupport.park、NIO Channel 操作等有限阻塞有效,需线程主动检查中断状态或处理异常;传统 IO 阻塞和 synchronized/lock() 无法响应中断,应使用 lockInterruptibly() 或超时机制替代。

java interrupt()打断阻塞的操作

J*a 中 interrupt() 并不能“强制停止”线程,而是给线程打一个中断标记,并在某些阻塞方法中触发 InterruptedException,从而让线程有机会响应并退出。关键在于:**它只对处于可中断阻塞状态(如 sleepwaitjoinLockSupport.park、NIO 的 Channel.read/write 等)的线程生效,且必须由线程自己检查或捕获异常来配合处理。**

哪些阻塞操作会被 interrupt() 打断?

以下常见阻塞调用在被中断时会立即抛出 InterruptedException,并清除当前线程的中断状态(即 isInterrupted() 变为 false):

  • Thread.sleep(millis)
  • Object.wait() / wait(timeout)
  • Thread.join()
  • LockSupport.park()(注意:parkNanos/parkUntil 同样响应中断,但不会抛异常,而是返回,需手动检查 Thread.interrupted()
  • j*a.nio.channels.InterruptibleChannel 相关操作(如 FileChannel.read()SocketChannel.connect() 等)

interrupt() 对普通循环或 IO 流读取(非 NIO)无效

比如以下代码不会因 interrupt() 而退出:

while (!Thread.currentThread().isInterrupted()) {
    // 普通计算或 System.out.println,不涉及可中断阻塞
}

又比如传统 BIO 的 InputStream.read() 是同步阻塞,**不可中断**——调用 interrupt() 不会唤醒它,也不会抛异常,线程会一直卡住,除非数据到达或流关闭。

✅ 正确做法:改用 NIO 的 InterruptibleChannel(如 SocketChannel),或配合超时机制 + 定期检查中断状态。

Lateral App Lateral App

整理归类论文

Lateral App 85 查看详情 Lateral App

如何正确响应中断?

不是调用了 interrupt() 就万事大吉,线程需主动配合。典型模式:

  • catch(InterruptedException e) 中,通常应恢复中断状态:Thread.currentThread().interrupt();(尤其在无法直接退出当前方法时)
  • 在循环中,用 Thread.interrupted()(静态方法,会清中断标志)或 isInterrupted()(实例方法,不清除)判断是否该退出
  • 避免“吞掉”中断异常却不做任何处理(例如空 catch)

示例:

while (!Thread.currentThread().isInterrupted()) {
    try {
        Thread.sleep(1000);
    } catch (InterruptedException e) {
        Thread.currentThread().interrupt(); // 恢复中断状态
        break; // 或抛出 RuntimeException,让上层处理
    }
    doWork();
}

interrupt() 不会打断 synchronized 或 Lock.lock()

synchronized 关键字进入临界区的过程不可中断;同样,ReentrantLock.lock() 也是不可中断的(会一直阻塞直到获取锁)。若需可中断的锁等待,应使用:

  • ReentrantLock.lockInterruptibly() —— 调用时若被中断,抛 InterruptedException
  • 或用 tryLock(long, TimeUnit) 配合超时和中断检查

基本上就这些。interrupt() 是协作式中断机制,不是暴力终止开关。理解哪些操作可中断、如何响应、以及何时该恢复中断状态,才能写出健壮可取消的并发代码。

以上就是j*a interrupt()打断阻塞的操作的详细内容,更多请关注其它相关文章!


# ai  # 广元搜索seo公司有哪些  # 网站建设科目  # 城区建设网站  # 在哪个网站推广比较好  # 中文网  # 相关文章  # 并在  # 有机会  # 万事大吉  # 抽象类  # 多态  # 表现形式  # 如何使用  # 抛出  # stream  # java  # 京东短信营销推广怎么做  # 泸州网站建设有哪些  # 珀莱雅营销推广策划案例  # 黑帽seo模板  # 长沙网站关键词排名推广  # 营销抖音推广客服电话 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: 汽车之家官方网站官网入口_汽车之家网页版直接进入  PyTorch模型训练效果不佳?深入剖析常见错误与调试技巧  印象笔记怎样用批量导出备知识库_印象笔记用批量导出备知识库【备份方法】  必由学官方登录入口 必由学教师学生账号快速访问  PostgreSQL海量数据高效导入策略:Python与Django实践指南  护手霜蹭到袖口上了如何清洗? 怎样避免留下一圈油印?  天猫双十一预售商品怎么退款_天猫双十一预售退款操作指南  神庙逃亡小游戏在线玩 神庙逃亡小游戏入口  J*aScript 字符串标签转换:使用正则表达式高效替换  2025-2030年全球乘用车销量预测:新能源成增长主力  不同用户不同价格! 索尼开启账户个性化定价测试  在J*a中如何开发简易电子商务商品管理系统_商品管理系统项目实战解析  c++20的std::jthread是什么_c++可中断线程与RAII式管理  TikTok网页版直接登录 TikTok网页端官方平台入口  在J*a中如何开发简易仓库管理与库存统计_仓库管理库存统计项目实战解析  Node.js 中使用 node-cron 实现定时 API 数据抓取与处理  如何在CSS中使用浮动制作导航栏_float实现水平菜单  ACG动漫视频网入口 ACG动漫*免费正版观看地址  Django模型中自动计算可用余额的实现方法  C++如何进行游戏物理模拟_使用Box2D库为C++游戏添加2D物理效果  谷歌浏览器无痕模式怎么开 Chrome开启无痕浏览设置方法【教程】  Tabulator表格中精确实现日期时间排序的指南  抖音极速版最新版本 抖音极速版官方下载地址  ExcelARRAYTOTEXT函数怎么自定义分隔符输出数组文本_ARRAYTOTEXT实现动态生成SQL语句  sublime怎么格式化代码_sublime代码美化与一键排版插件配置  曝R星经典之作开发图 设计简陋但信息密集!  利用Bokeh CustomJS动态控制DataTable列可见性  如何在CSS中使用visited与link控制链接颜色_visited link伪类配合  如何为你的Composer包编写自动化测试_集成PHPUnit到Composer的scripts工作流  荣耀Play7TPro怎样在信息App置顶客服对话_iPhone荣耀Play7TPro信息App置顶客服对话【优先查看】  AO3官方在线访问地址 Archive of Our Own最新镜像合集  Flexbox布局实践:实现粘性导航栏与底部固定页脚  windows10怎么关闭系统提示音_windows10彻底静音设置方法  wps文字怎么插入目录并自动更新_wps文字如何插入目录并自动更新方法  poki免费入口快捷访问 poki人气小游戏直接玩站点  c++如何使用std::memory_order控制原子操作顺序_c++ C++11内存模型详解  React Router v6 教程:构建认证保护的私有路由与重定向策略  小米汽车11月交付量突破40000台!雷军:将继续努力  深入理解字体排版:Adobe光学字偶距与CSS字偶距的差异与实现  Lar*el如何生成PDF或Excel文件_Lar*el文档导出工具与使用教程  包子漫画官方网站阅读入口-包子漫画在线漫画官网直达链接  XML中包含HTML标签导致解析错误? 正确嵌入非XML数据的两种方法  《北京人工智能产业白皮书(2025)》发布:全年核心产值预计突破 4500 亿元  Yandex官网搜索引擎免登录_俄罗斯Yandex一键直达入口  小红书网页版入口链接分享 小红书官网直接进  百度浏览器字体显示异常偏小_百度浏览器字体渲染修复方案  Windows7怎么硬盘安装 Windows7提取ISO镜像到非系统盘并运行setup.exe实现硬盘直装【教程】  知音漫客正版漫画平台_知音漫客官网账号登录  C++指针和引用有什么区别_C++内存管理核心概念深度解析  uc浏览器网页版极速入口 uc网页浏览器网页版流畅体验 

搜索