news 2026/1/9 13:27:46

Java常见技术分享-20-多线程安全-进阶模块-并发集合与线程池-ThreadPoolExecutor

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Java常见技术分享-20-多线程安全-进阶模块-并发集合与线程池-ThreadPoolExecutor

简介

它是Java中具体的线程池实现类, 实现了ExecutorService接口。
它负责创建,复用, 销毁线程,让一个线程能重复执行多个任务, 而不必每次新建。 从而减少 新建 和 销毁线程的开销。

核心参数
  • 核心线程数(这里边的线程一直存在)
  • 最大线程数 (最多能创建的线程总数, 额外的线程数(就像临时员工 ), 当任务变少的时候, 空闲一段时间就会被销毁)
  • 空闲线程存活时间 (针对 额外的线程 , 如果超过这个存活时间 还没接受到任务 就自动销毁 )
  • 工作队列(存放暂时处理不了的任务 )
    • 有界队列 有个最大长度 , 队列满了, 就会新建 额外的线程, 当达到最大的线程数时, 就会 触发 拒绝策略
    • 无界队列, 超过核心线程数 处理的任务 直接放在 队列里边, 由于不会满, 所以出了核心线程数 ,不会创建新的 线程, 好处 是 不会触发拒绝策略, 坏处是 容易内存溢出, 应用崩溃。
核心流程

当一个任务提交到线程池时

  • 会判断当前运行的线程数 是否小于核心线程数
    • 如果是 直接创建一个核心线程来处理这个任务
    • 如果不是
      • 那么再判断 工作队列 是否已满
        • 如果没满 , 就放进去等待
        • 如果满了
          - 判断 当前线程数是否 小于最大线程数
          - 如果小于, 那么创建新的额外线程
          - 如果等于, 那么 就会触发拒绝策略
默认的四种拒绝策略
  • 直接抛出异常(RejectedExecutionException)
  • CallerRunsPolicy (主线程 会 直接阻塞式 的完成这个任务,再走后面的逻辑, 好处是不会丢任务)
  • DiscardPolicy (直接丢掉)
  • DiscardOldestPolicy (丢掉最旧的任务, 即会丢弃直接先提交的任务)
核心场景区分
  • CPU 密集型任务(像 视频编码, 复杂算法这种, 需要CPU一直高强度的工作, 因为CPU本身处理能力有限, 线程数太多, 反而会因为频繁的切换上下文, 导致效率下降, 所以这种场景 CPU不能太多 ),核心线程数 和 最大线程数(两个参数设置成一样 有一个好处是 避免频繁的创建和销毁非核心线程 带来的不稳定性) 通常设置为 CPU核心数的 1到2倍 。
  • IO 密集型任务 (像文件读写,网络请求这些, 线程经常处理等待状态, 这时候多开一些线程, 就能让CPU在等待的时间去处理别的任务, 提高整体效率, 核心线程数就可以设置的高一点) ,通常是CPU核心数的2到4倍

应用场景

  • Web服务器处理请求, 像Tomcat这类服务器, 每收到一个用户请求, 就会交给线程池里边的一个线程去处理。
  • 执行异步耗时任务, 比如审批流中的一个审批人审批完 ,给下一个审批人发送待办短信 通知 或者 邮件, 把他们交给线程池, 主线程 就不用等待这些任务的完成。
  • 批量处理任务, 比如需要批量处理大量的数据, 此时就可以 将数据 拆成很多小块, 让多个线程同时处理。 比如 导入一个大型文件, 在校验的时候, 就可以拆成很多个部分, 并行进行校验, 节省时间。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2025/12/31 19:02:25

从一篇IDEA笔记开始,我走出了自己的技术创作路

一名普通 Java 开发者的博客成长手记 一、起点:那篇没人看的 IDEA 工具栏笔记 2023年12月3日,我在 CSDN 发了第一篇博客:《IDEA自定义工具栏》。 起因特别简单: 在 IDEA 里,“Project Structure”和“Settings”这两…

作者头像 李华
网站建设 2026/1/1 21:10:35

分析家教小程序的功能设计

我在ui界面设计的层面上纠结了好久。 但是ui只是一个衍生品,他本身没有逻辑 ui界面设计,只是辅助,是为了数据可视化更优雅,做的事情,我们来研究一下,对于一个IT系统。从功能的角度上,可以实现什…

作者头像 李华
网站建设 2025/12/30 0:26:24

ModelEngine应用编排创新实践:通过可视化编排构建大模型应用工作流

目录 1. 前言 2. ModelEngine 平台概述 3. 实战:应用工作流编排全流程 3.1 创建与定义 3.2 基础节点使用与流程设计 3.3 知识库节点与自动总结 3.4 自定义插件开发与集成 3.5 MCP服务接入与外部能力扩展 3.6 智能表单与用户交互设计 3.7 工作流调试与评估…

作者头像 李华
网站建设 2025/12/31 5:36:12

解锁PC游戏手柄兼容性:虚拟控制器驱动终极指南

解锁PC游戏手柄兼容性:虚拟控制器驱动终极指南 【免费下载链接】ViGEmBus 项目地址: https://gitcode.com/gh_mirrors/vig/ViGEmBus 你是否曾经遇到过这样的尴尬:满怀期待地连接新手柄到电脑,却发现游戏完全无法识别?或者…

作者头像 李华
网站建设 2025/12/30 0:25:13

PyTorch镜像中使用transformers pipeline快速推理

在 PyTorch 镜像中用 Transformers Pipeline 实现高效推理 在当今 AI 应用快速落地的背景下,如何将一个预训练模型从实验环境平稳、高效地部署到生产系统,成了开发者面临的核心挑战之一。尤其是在自然语言处理领域,尽管 Hugging Face 的 tran…

作者头像 李华
网站建设 2026/1/2 20:15:29

XUnity自动翻译插件:零门槛实现游戏文本实时翻译

XUnity自动翻译插件:零门槛实现游戏文本实时翻译 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator 还在为看不懂的日文RPG、韩文视觉小说而烦恼吗?XUnity自动翻译插件让语言障碍成为…

作者头像 李华