线程池工作流程

张开发
2026/4/21 5:41:05 15 分钟阅读

分享文章

线程池工作流程
任务提交 ↓ ① 核心线程数未满 ├─ 是 → 创建新核心线程执行 └─ 否 ↓ ② 任务队列已满 ├─ 否 → 放入队列等待 └─ 是 ↓ ③ 最大线程数未满 ├─ 是 → 创建非核心线程执行 └─ 否 ↓ ④ 执行拒绝策略 形象比喻(迅速理解)把线程池想象成银行办理业务corePoolSize核心窗口常开的 5 个窗口一直有人值班workQueue等候区等候区的椅子客户先在这里排队maximumPoolSize最大窗口最多可以开 10 个窗口5 个核心 5 个临时keepAliveTime临时窗口的工作人员如果 60 秒没客户就下班handler拒绝策略等候区和所有窗口都满了保安怎么处理新客户AbortPolicy告诉客户今天不办了抛出异常CallerRunsPolicy让客户自己填表调用者自己执行DiscardPolicy直接无视客户DiscardOldestPolicy让等候区最前面的客户离开新客户进来如果核心线程数是 5最大线程数是 10队列容量是 100现在提交了 120 个任务会发生什么提示按照工作流程一步步分析前 5 个任务怎么处理第 6-105 个任务怎么处理第 106-110 个任务怎么处理第 111-120 个任务怎么处理**1-5核心线程执行创建 5 个核心线程6-105放入队列等待队列容量 100刚好装满106-110非核心线程执行创建 5 个临时线程111-120被拒绝触发拒绝策略** 关键理解点很多人会误解的地方❌ 错误理解队列满了就立即创建新线程✅ 正确理解先填满队列再创建非核心线程

更多文章