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

java线程中断的艺术

文章目录

    • 引言
    • java中的中断
      • 何时触发中断阻塞
      • 如何响应中断
    • 中断的一些实践
      • 基于标识取消任务
      • 如何处理阻塞式的中断
      • 合理的中断策略
      • 时刻保留中断的状态
      • 超时任务取消的最优解
      • 对于硬件
    • 小结
    • 参考

引言

我们通过并发编程提升了系统的吞吐量,特定场景下我们希望并发的线程能够及时的合理的停止,所以就来聊聊java并发编程中中断的哲学。

java中的中断

何时触发中断阻塞

当出现以下几种情况,线程就会触发阻塞或者暂停:

  1. 等待IO操作返回
  2. 等待线程休眠醒来
  3. 等待获取java同步锁

此时,线程就会处于BLOCKEDWAITINGTIMED_WAITING、几种状态

如何响应中断

在操作系统中,线程的中断方式一般有两种:

  1. 抢占式:当线程需要中断时,直接让线程立刻停止手里的任务。
  2. 协作式:当线程需要中断时,通过标识告知线程需要被中断,线程轮询时看到这个标识就会直接中断。

而Java线程则是采用协作式中断,通知对于中断的后线程触发InterruptedException,通常来说我们对线程中断响应度越高,就越容易及时取消一些非必要的操作,对应按照如下两种方式进行响应:

如果当前业务层面不具备处理此类异常的能力,那么就将异常向上层抛出传递给调用者:

public void func() throws InterruptedException {Thread.interrupted();}

如果类似于Runnable 这种无法向上抛出的内置接口类的实现,我们则可以主动去捕获中断,并将当前线程打断从而让高层栈帧感知到这个异常中断:

class Task implements Runnable {@Overridepublic void run() {try {Thread.sleep(1000);} catch (InterruptedException e) {//打断当前线程引发更高层线程响应此中断Thread.currentThread().interrupt();}}}

中断的一些实践

基于标识取消任务

所以对于线程的的中断,我们可以采用协作式标识来停止线程,通过任务运行时轮询检测,一旦看到标识设置为true即已请求取消,则提前结束运行。

就像下面这段代码,我希望的任务是每个1s输出一次,为了让任务的能够及时停止,我们采用volatile标识cancelled,这样就能取消操作尽可能及时可见:

public class Task implements Runnable {/*** 使用volatile修饰保证标识修改可见*/private volatile boolean cancelled = false;private final Thread thread = new Thread(this);public void start() {thread.start();}/*** 停止时,通过cancel请求取消*/public void cancel() {cancelled = true;}@Overridepublic void
http://www.xdnf.cn/news/8804.html

相关文章:

  • spike:一款协议模糊测试器工具包!全参数详细教程!Kali Linux教程!
  • TF-IDF和词袋模型
  • FPGA高速接口 mipi lvds cameralink hdml 千兆网 sdi
  • 「Python教案」输入输出函数的使用
  • c语言和系统的文件接口
  • 427. 建立四叉树
  • OpenLayers 加载动画控件
  • 对比Redis与向量数据库(如Milvus)在AI中的应用
  • PyQt5高效布局指南:QTabWidget与QStackedWidget实战解析
  • LangChain4j第三篇: RAG的简单应用与实践
  • 留存率问题
  • [AI]主流大模型、ChatGPTDeepseek、国内免费大模型API服务推荐(支持LangChain.js集成)
  • QWidget类关系图
  • AI方案调研与实践二:模型训练
  • 电子电路:什么是孤立导体?即孤立导体的电荷分布与特性
  • Linux常见指令合集+知识点
  • 12软件测试需求分析案例-删除学生信息
  • 量子计算:开启未来计算新纪元的革命性技术
  • CAU人工智能class5 激活函数
  • 科学计算中的深度学习模型精解(2)(RNN,LSTM,Transformer,KAN)
  • 自动涂胶机设计及其在工业生产中的应用研究
  • 软件测试:黑盒+白盒测试【等价类/边界值/判定表/因果图/两两组合/场景/错误推测逻辑覆盖/路径分析】
  • 光模块(Optical Module)的工作原理、技术参数、应用场景及行业趋势
  • (头歌作业)-Python第六章作业
  • 给定终点和时间的DoubleS轨迹
  • 语音搜索崛起:专业优化指南助您引领潮流
  • Docker 安装 Harbor 教程(搭建 Docker 私有仓库 harbor 避坑指南)【woodwhales.cn】
  • C++入门
  • mysql统计数据库大小
  • 【场景分析】基于概率距离快速削减法的风光场景生成与削减方法