线程池的核心参数与工作流程?
发布于
一、七大核心参数
- corePoolSize:核心线程数,即使空闲也保留。
- maximumPoolSize:最大线程数。
- keepAliveTime:非核心线程空闲存活时间。
- unit:时间单位。
- workQueue:阻塞队列。
- threadFactory:线程工厂。
- handler:拒绝策略。
二、工作流程
- 线程数 < corePoolSize → 创建核心线程执行。
- 线程数 ≥ corePoolSize → 任务入队。
- 队列满 → 创建非核心线程(直到 maxPoolSize)。
- 线程数 = maxPoolSize 且队列满 → 执行拒绝策略。
三、拒绝策略
- AbortPolicy:抛异常(默认)
- CallerRunsPolicy:调用者线程执行
- DiscardPolicy:直接丢弃
- DiscardOldestPolicy:丢弃队列最旧任务
四、为什么不建议用 Executors
FixedThreadPool/SingleThreadPool 队列无界可能 OOM;CachedThreadPool 线程数无界可能耗尽资源。应手动 new ThreadPoolExecutor。