news 2026/1/28 5:47:04

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进行投诉反馈,一经查实,立即删除!
网站建设 2026/1/24 17:20:11

XUnity自动翻译器:轻松实现游戏语言无障碍体验

XUnity自动翻译器:轻松实现游戏语言无障碍体验 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator 还在为外语游戏中的文字内容而烦恼吗?XUnity自动翻译器就是你的最佳解决方案&#x…

作者头像 李华
网站建设 2026/1/17 20:45:43

XUnity Auto Translator 终极指南:游戏翻译快速上手

XUnity Auto Translator 终极指南:游戏翻译快速上手 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator XUnity Auto Translator是一款专为Unity游戏设计的自动翻译插件,能够帮助玩家轻…

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

游戏翻译神器XUnity Auto Translator:三步搞定外语游戏无障碍体验

游戏翻译神器XUnity Auto Translator:三步搞定外语游戏无障碍体验 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator 还在为看不懂的外语游戏发愁吗?今天我要分享一个超级实用的工具—…

作者头像 李华
网站建设 2026/1/18 7:28:54

PyTorch镜像中实现多模态学习(Multimodal Learning)

在PyTorch镜像中实现多模态学习 在智能内容理解、医疗影像诊断和自动驾驶感知系统日益复杂的今天,单一模态的模型已经难以应对现实世界的综合判断需求。一个真正“智能”的系统,需要能同时看图、读文、听声,并从中提取关联信息——这正是多模…

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

PCIe-Transaction Descriptor- Attributes Field

PCIe-Transaction Descriptor - Attributes Field Attributes字段是PCIe TLP头部中的一个重要组成部分,用于优化事务处理。让我详细解析这个字段的设计考虑和SoC实现。 Attributes字段详解 在PCIe规范中,Attributes字段包含了两个主要部分:请注意,Attributes 是提示,可…

作者头像 李华