线程相关_线程池原理

一、定基调

线程池本质是一个资源管控模型,用池化技术和排队机制在系统开销和响应速度间找平衡。核心思想是:提前创建一批线程,复用它们执行多个任务,避免频繁创建和销毁线程的开销。

二、将机制

  1. 核心线程常驻------保底处理能力
  2. 队列缓冲------任务先排队,能不扩线程就不扩
  3. 弹性扩张------只有队列满了才开临时工(非核心线程)
  4. 精准回收------临时工干完活,超时自动离职

三、埋钩子

  1. 为什么先排队后扩容?

    线程创建成本高,能复用就复用

  2. 为什么默认核心线程不回收?

    避免频繁创建销毁,稳定响应

  3. 为什么要有拒绝策略?

    系统要自我保护,不能无限制的接活

  4. 核心线程数设置多少?
    看任务是cpu密集还是IO密集

  5. 队列为什么用LinkedBlockingQueue?
    无界队列可能导致OOM

  6. 线程预热
    线程默认不预热,第一次任务来才创建线程,需要预热需要设置prestartAllCoreThreads

  7. 回收机制
    默认只回收非核心线程,想要核心线程的话,需要设置allowCoreThreadTimeoOut

四、架构为啥这样设计?

  1. 用核心线程低成本处理常态流量
  2. 用队列缓冲突发流量,观察是否持续
  3. 弹性扩容应付真实峰值
  4. 最后防线:拒绝策略防止系统被压垮

提交任务

│

▼

┌──────────────────────┐

│ 当前线程数 < 核心线程数? │

└──────────────────────┘

│ 是 │ 否

▼ ▼

创建新线程执行任务 ┌────────────────┐

│ 任务队列未满? │

└───────────── ──┘

│ 是 │ 否

▼ ▼

放入队列等待 ────────────────────┐

│ 当前线程数 < 最大线程数? │

└───────────────────┘

│ 是 │ 否

▼ ▼

创建临时线程执行任务 执行拒绝策略

相关推荐
东鹏特饮1 小时前
系统运维(传统/通用运维)面试题
开发语言·php
今天要早睡_2 小时前
C++01_入门基础复习
开发语言·c++
黑马程序员毕设3 小时前
基于 Java 的餐饮点餐系统设计与应用报告
java·开发语言
1-1=04 小时前
C# 委托与事件
开发语言·c#
Fuyo_11194 小时前
C++ 运行时多态与虚函数机制全面剖析【面试重点】
开发语言·c++·面试
武天旭4 小时前
AI安全--AI大模型的毒性偏见与安全对齐实践
人工智能·python·深度学习
w_zero_one5 小时前
递归算法(一)
java·开发语言·算法
视觉小萌新5 小时前
AI Class 3 · Chapter 2-3:函数、异常、文件读写+JSON / JSONL 读写(小白版)
人工智能·python·json
Julien20046 小时前
管理机密(一)
运维·服务器·开发语言·学习方法
Chen_harmony6 小时前
七、STL与string类
开发语言·c++