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

从0开始理解并发、线程与等待通知机制(中)

线程启动与终止

  • 线程启动方式
    • 继承Thread类并重写run()方法。
    • 实现Runnable接口并交给Thread执行。
  • 线程终止方式
    • 不建议使用stop()方法,因其具有强制性,可能导致资源未正确释放。
    • 推荐使用中断机制:调用interrupt()方法,设置中断标志位。

线程生命周期详解

  • 线程状态分类
    • 新建态(New):线程对象创建但尚未启动。
    • 就绪态(Runnable):线程等待CPU调度。
    • 运行态(Running):线程正在执行。
    • 阻塞态(Blocked):等待获取锁。
    • 等待态(Waiting):无限期等待唤醒。
    • 超时等待(Timed Waiting):有限时间内等待唤醒。
    • 终止态(Terminated):线程执行完毕。
  • 线程状态转换图解
    通过一张图清晰展示线程状态之间的转换关系。

线程调度机制:协同式与抢占式

  • 协同式调度
    • 线程主动让出CPU使用权。
    • 缺点:可能导致其他线程“饿死”。
  • 抢占式调度
    • 由操作系统决定何时让出CPU。
    • 优点:资源利用率更高,避免线程长期占用CPU。

Java线程实现模式

  • 三种线程实现方式
    • 内核线程实现(1:1):每个线程对应一个操作系统线程。
      • 优点:无需自行管理调度。
      • 缺点:系统调用开销大,线程数量受限。
    • 用户线程实现(N:1):多个线程映射到一个操作系统线程。
      • 优点:线程切换快,开销低。
      • 缺点:缺乏操作系统支持,难以实现阻塞操作。
    • 混合实现(M:N):用户线程与操作系统线程按比例映射。
      • 兼顾性能与调度灵活性。
  • Java线程实现
    • Java早期采用用户线程实现。
    • JDK 1.2后改为内核线程实现(HotSpot VM)。
    • 线程优先级映射受操作系统限制,实际效果不明显。

协程(Coroutine)简介

  • 协程定义
    协程是一种轻量级线程,由语言层面实现,也称为“用户线程”。
  • 协程优势
    • 资源消耗低:单个协程仅占几百字节。
    • 支持大规模并发:数十万协程同时运行。
  • 协程适用场景
    • IO密集型任务(如网络请求、文件读写)。
    • 不适用于计算密集型任务(协程切换成本低于线程,但在计算任务中无明显优势)。
  • Java中的协程实现
    • 使用第三方库(如Kotlin协程、Quasar)。
    • JDK 19引入虚拟线程(预览版),未来将在JDK 21正式发布。

守护线程(Daemon Thread)

  • 守护线程作用
    在后台执行支持性工作(如垃圾回收、信号监听)。
  • 与非守护线程区别
    • 当所有非守护线程结束时,JVM自动退出,守护线程随之终止。
    • 守护线程不负责资源释放,不适合执行关键清理工作(如文件关闭、解锁)。

线程间通信与协调

  • 线程间通信机制
    • Java提供管道流(PipedInputStream/PipedOutputStream)实现线程间数据传输。
    • 字节流处理二进制文件,字符流处理文本文件。
  • 线程协作案例:顺序执行控制
    • 问题描述:确保T2在线程T1执行完后执行,T3在T2执行完后执行。
    • 解决方案:使用join()方法。

      java

      t1.start(); t1.join(); // T2等待T1执行完 t2.start(); t2.join(); // T3等待T2执行完 t3.start();

线程上下文切换与性能优化

  • 线程上下文切换类型
    • 线程调度切换。
    • 系统调用切换(如IO读写、获取系统时间)。
    • 中断切换。
  • 优化建议
    • 减少不必要的线程上下文切换。
    • 避免频繁系统调用(如减少System.currentTimeMillis()的使用)。
    • 使用异步日志输出等方式降低同步阻塞影响。

线程池配置建议

  • 线程池大小配置原则
    • 计算密集型任务:线程数 ≈ CPU 核心数。
    • IO密集型任务:线程数 ≈ CPU 核心数 × 2(需根据具体测试调整)。
http://www.jsqmd.com/news/528092/

相关文章:

  • Thief-Book IDEA插件:将开发等待时间转化为阅读时间,提升工作效率50%
  • 无锡换玻璃多少钱|2026高端腕表表镜维修全指南(含6城正规门店及全品牌解析) - 时光修表匠
  • 如何轻松下载哔咔漫画?这款免费下载器让你告别手动保存烦恼
  • 用MATLAB复现雷达LFM信号:从波形生成到模糊函数分析(附完整代码)
  • StructBERT文本相似度模型效果实测:短文本vs长文本精度差异分析
  • LumiPixel Canvas Quest色彩控制专题:生成特定配色方案的人像作品
  • 通义千问1.5-1.8B-Chat-GPTQ-Int4 WebUI .NET开发集成案例:C#客户端调用与桌面应用开发
  • HarmonyOS App开发——鸿蒙ArkTS端云一体化云数据库应用和实战
  • 【Python基础入门】第五课 : 函数进阶、作用域、参数详解与Lambda表达式
  • TC397 freeRTOS多核工程包:支持CAN、TCP/IP及SPI通信,6核同步调度运行...
  • 2026年光刻胶冷库厂家推荐:无锡凌洋新能源设备,半导体防爆冷库/电解液冷库/电子芯片冷库厂家精选 - 品牌推荐官
  • 市面上 AI SEO 工具测评(2026):如何选择最适合你的方案?
  • 选购旧房翻新改造服务,昆明哪家口碑好又专业 - 工业品牌热点
  • OpCore Simplify:实现OpenCore EFI配置自动化的3个核心步骤
  • AI写测试代码真的靠谱吗?揭秘字节/阿里内部正在用的Python智能用例生成框架,附可运行GitHub仓库
  • Imatest 3.7 工具下载
  • JAVA剪辑接单报价比价系统源码支持小程序+公众号+H5
  • 支付宝立减金回收如何找到正规回收平台,回收步骤解析 - 京回收小程序
  • 品创共振科技联系方式:关于其全网获客服务的客观评估与通用联系方式 - 品牌推荐
  • 3分钟掌握FigmaCN:让设计师效率提升40%的中文界面解决方案
  • 2026年上海靠谱的墓地陵园服务排名:墓地陵园服务找哪家 - 工业品网
  • 2026年文旅酒店投资怎么选?拆解成都一家酒店如何通过多业态融合实现旺季日营业额破8万 - 速递信息
  • OpenClaw 视频会议应用指南:从会议纪要到自动待办
  • 2026北京茅台酒回收全指南:三大靠谱渠道深度解析 - 资讯焦点
  • 2026反应釜厂家趋势:三大核心变革重塑格局 - 速递信息
  • 柔性防火包裹高性价比优质厂商推荐 - 资讯焦点
  • 飞书机器人集成实战:OpenClaw调用Qwen3.5-4B-Claude处理工单
  • Python入门第2章:变量和简单的数据类型
  • 2026铝镁质保温板行业深度评测报告 - 资讯焦点
  • 记一次SQL注入流量分析 | 添柴不加火