当前位置: 首页 > news >正文

JUC:4.线程常见操作与两阶段终止模式

在线程中,wait()、join()、sleep()三个方法都是进行阻塞的方法。对应可以使用interrupt()方法进行打断,被打断后线程会抛出打断异常,但是不会修改IsInterrupt,也就是此时去调用IsInterrupted()方法后获得的实际上是false。

而当线程处于非阻塞状态时,使用interrupted()方法对线程进行打断,此时不会出现打断异常,但是会将IsInterrupt设置为true。

这里需要引入两阶段终止模式

其实际就是一种正确的线程终止模式,如果我们现在有一个线程需要去终止,如果我们直接调用stop()指令,考虑线程带锁的情况,线程获取了锁并且还未释放锁,此时被stop,显然线程无法释放锁,其他线程就无法获取锁。显然这不是合理的。

为了解决这个问题,我们可以使用interrupt来实现线程终止,如果线程此时处于wait()、join()、sleep(),我们需要捕获打断异常,并且手动将IsInterrupt置为true,而当线程在做其他事的时候,打断操作会自行将IsInterrupt置为true。

也就是说,只要执行了打断操作,都会获得IsInterrupt为true,此时我们只需要添加一个固定的条件判断,当IsInterrupt为true时,就进行后续处理,比如释放锁,释放其他资源等等,最终进行退出。

比如上述图中的一个监控线程,全程在进行监控,现在想要终止线程,具体流程图如图。

相关文章:

  • 【图像处理入门】12. 综合项目与进阶:超分辨率、医学分割与工业检测
  • Godot4.3类星露谷游戏开发之【简易库存】(UI部分)
  • 一文详解 transformer 中的 self-attention
  • 数星星--二分
  • AI Agent全解析:定义、原理与B2B企业中的应用落地指南
  • 【Linux手册】进程终止:进程退出和信号的响应机制
  • C++面向对象-友元
  • CSS 与 JavaScript 加载优化
  • Java调用金蝶webApi保存接口修改数据
  • 无线USB转换器TOS-WLink的无线USB助手配置文件详细胡扯
  • Unreal引擎——Chaos物理引擎(不)详解
  • 【队列】----【Keep In Line】
  • 阶段二开始-第一章—8天Python从入门到精通【itheima】-116节(封装)
  • 国防科大刘丽教授团队提出了一种用于合成孔径雷达目标识别的解耦自监督子空间分类器|TGRS
  • C++11新库特性:从入门到精通
  • 《Opto-Electronic Advances》热点论文速览(2025)
  • 【Python】实现对LGBT+ rights worldwide (2025)数据集的可视化展示
  • react + ant-design实现数字对比动画效果:当新获取的数字比之前展示的数字多或少2时,显示“+2”或“-2”的动画效果
  • A模块 系统与网络安全 第三门课 网络通信原理-2
  • 《二分枚举答案(最值问题)》题集