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

ThreadPoolExecutor参数解析

private ExecutorService createThreadPool(int poolSize) { return new ThreadPoolExecutor( corePoolSize, // corePoolSize(核心线程数) maximumPoolSize, // maximumPoolSize(最大线程数) 60L, // 线程空闲60秒后回收 maximumPoolSize > corePoolSize 时,超出核心数的线程空闲 60 秒后才会被回收 TimeUnit.SECONDS, // unit(时间单位) new LinkedBlockingQueue<>(1000), // workQueue(任务队列) new ThreadFactory() { // threadFactory(线程工厂) private final AtomicInteger count = new AtomicInteger(0); @Override public Thread newThread(Runnable r) { Thread thread = new Thread(r, "user-info-sdk-" + count.incrementAndGet()); //使用的是daemon线程,executor.shutdown()后; //daemon线程会被销毁,线程销毁时; //其ThreadLocal会自动被GC回收; //只需要清理调用close()的那个线程即可; thread.setDaemon(true); return thread; } }, new ThreadPoolExecutor.AbortPolicy() // handler(拒绝策略) ); }

1. corePoolSize = corePoolSize (核心线程数)
线程池中始终保持存活的线程数量,即使它们空闲也不会被回收。
当前值:25(来自 config.getThreadPoolSize())
含义:线程池启动后会创建并保持 25 个工作线程

2. maximumPoolSize = maximumPoolSize(最大线程数)
线程池允许创建的最大线程数量。
当前值:50(与核心线程数相同)
含义:这是一个会弹性的线程池,弹性扩展(生产环境建议设置成一样的,不进行弹性变化)
执行逻辑:当队列满了且线程数已达最大时,触发拒绝策略

3. keepAliveTime = 60L + TimeUnit.SECONDS
非核心线程空闲后的存活时间。
当前值:60秒
注意:因为 corePoolSize == maximumPoolSize,不存在"非核心线程",所以这个参数实际上不生效
只有当 maximumPoolSize > corePoolSize 时,超出核心数的线程空闲 60 秒后才会被回收

4. workQueue = new LinkedBlockingQueue<>(1000)(任务队列)
当核心线程都在忙时,新提交的任务会先进入这个队列等待。
当前值:容量为 1000 的有界阻塞队列
执行顺序:
核心线程有空 → 直接执行
核心线程都忙 → 放入队列等待
队列也满了 → 尝试创建非核心线程(如果核心线程和最大线程数一直 core=max,不会再创建)
触发拒绝策略

5. threadFactory(线程工厂)
控制每个线程的名称、优先级、守护线程属性。

daemon=true 的重要性:
如果设为 false(用户线程),即使 main 方法结束了,JVM 也不会退出,因为用户线程还在运行
设为 true(守护线程),main 结束后 JVM 正常退出,守护线程随之销毁

6. handler = new ThreadPoolExecutor.AbortPolicy()(拒绝策略)
当线程池和队列都满了时的处理方式。

http://www.jsqmd.com/news/1153717/

相关文章:

  • D3KeyHelper完全指南:5分钟打造你的暗黑3专属按键助手
  • 暗黑3自动按键助手:5分钟告别手指疲劳,游戏效率提升200%
  • 技术 Leader:“你根本不会用 Codex 和 Claude Code,也不懂 Vibe Coding!”,我:“用你教我?”
  • AcFunDown:轻松下载A站视频的终极指南
  • 锂离子电池过压保护与BQ29200硬件设计实践
  • Fast-GitHub:国内开发者必备的GitHub下载加速插件
  • 如何通过AcFunDown实现A站视频一站式智能下载管理
  • 呆滞库存分析怎么做?从库龄、金额、责任来源拆开看库存!
  • 1分钟0代码实现大学班级假期离校去向全流程统计 !辅导员大学班委必备!
  • WAF 如何缓解零日漏洞和业务逻辑攻击?
  • 终极指南:如何免费重置JetBrains IDE试用期?ide-eval-resetter完整教程
  • 清华大学LaTeX论文模板:5步搞定专业学位论文排版
  • D3KeyHelper:3分钟快速上手,暗黑3宏工具让你的游戏体验翻倍提升
  • KKManager终极指南:告别模组管理混乱,轻松掌控Illusion游戏世界
  • 苏州AI应用开发培训机构有哪些 - 专业课程与就业方向全解析
  • 终极Windows键盘重映射指南:如何使用SharpKeys免费定制你的键盘布局
  • Twenty:开源 CRM 的另一种选择
  • 如何打造你的专属桌面AI伴侣:呆啵宠物完整指南
  • Windows 12网页版终极指南:无需安装的在线Windows体验
  • 调 MCP Server 像在排地雷?我整理了这套日志方案,总算能睡个好觉了
  • NAT 与内网渗透:从穿透原理到实战手段全解
  • 177、traceback 深度解析:堆栈帧读取、异常链追溯与生产错误自动分类
  • 暗黑破坏神3自动按键助手终极指南:5分钟快速上手,游戏效率提升200%
  • 088、单图像超分实战:从SRCNN到SwinIR,复现并对比主流算法性能
  • D3KeyHelper:5分钟掌握暗黑破坏神3终极自动化按键助手
  • 5分钟掌握Rainmeter:让Windows桌面随音乐律动的终极指南
  • LinkSwift:九大网盘直链解析解决方案深度解析
  • 重构无线音频边界:基于高通QCC3056的新一代蓝牙音频发射器深度解析
  • 如何用10分钟语音数据打造专业级AI变声器:RVC WebUI完全指南
  • WindowsCleaner:彻底告别C盘爆红!这款开源工具让Windows系统清理如此简单