news 2026/6/6 21:01:39

第17篇:Java线程池超全详解,七大核心参数、四种常用线程池、拒绝策略、底层原理、生产实战规范

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
第17篇:Java线程池超全详解,七大核心参数、四种常用线程池、拒绝策略、底层原理、生产实战规范

前面我们学完了多线程创建方式、锁机制、volatile、线程通信

但是!开发中绝对禁止手动 new Thread()

为什么?

频繁创建、销毁线程开销极大、无法控制并发数量、容易OOM内存溢出、系统崩溃。

所以官方统一规范:所有多线程业务,统一使用线程池!

本篇是多线程最终终章,也是面试最高频、工作最常用的一篇。

我带你吃透:线程池底层思想、七大核心参数、四种线程池、四大拒绝策略、线程池工作流程、生产规范。零基础一次性学通透。

本篇核心学习目标:

  • 理解线程池核心作用与优势

  • 死磕线程池七大核心参数(面试必考)

  • 掌握四种常用内置线程池使用场景

  • 吃透四大拒绝策略原理

  • 看懂线程池完整工作流程

  • 掌握生产环境线程池实战规范

  • 搞定线程池所有面试题


一、什么是线程池?为什么必须用线程池?

1.1 线程池通俗理解

线程池:提前创建好一批线程,放入池中统一管理,任务来了直接复用,任务结束线程不销毁,循环复用

生活类比:

手动new线程 =临时招工,干完活立刻辞退,反复招人开销极大

线程池 =固定员工团队,任务来了直接干活,永久复用

1.2 线程池四大核心优势(必背)

  1. 降低资源消耗:避免频繁创建、销毁线程,节省CPU内存

  2. 提高响应速度:任务到达无需新建线程,直接复用

  3. 统一管理线程:可控并发数、防止无限创建线程导致OOM

  4. 可拓展性强:支持延迟、定时、拒绝策略、任务排队


二、线程池七大核心参数(全篇最重要、面试必背)

Java线程池核心类:ThreadPoolExecutor

所有线程池底层都是它,七大参数缺一不可。

public ThreadPoolExecutor( int corePoolSize, // 核心线程数 int maximumPoolSize, // 最大线程数 long keepAliveTime, // 空闲超时时间 TimeUnit unit, // 时间单位 BlockingQueue<Runnable> workQueue, // 任务阻塞队列 ThreadFactory threadFactory, // 线程工厂 RejectedExecutionHandler handler // 拒绝策略 )

2.1 七大参数通俗详解

  • corePoolSize 核心线程数:常驻线程,永远不销毁,随时待命

  • maximumPoolSize 最大线程数:线程池能容纳的最大线程总量

  • keepAliveTime 空闲存活时间:非核心线程空闲超时自动销毁

  • unit 时间单位:毫秒、秒、分钟等

  • workQueue 阻塞队列:任务太多,线程处理不过来,存入队列排队

  • threadFactory 线程工厂:负责创建线程、设置线程名、优先级

  • handler 拒绝策略:队列满、线程爆满,触发任务拒绝规则


三、线程池完整工作流程(面试高频)

我用大白话梳理线程池执行任务的完整流程,一步不差:

  1. 任务提交,判断核心线程数是否已满?未满 → 创建核心线程执行任务

  2. 核心线程已满 → 判断阻塞队列是否已满?未满 → 任务入队排队

  3. 队列已满 → 判断最大线程数是否已满?未满 → 创建非核心线程执行任务

  4. 最大线程数也满 →触发拒绝策略

  5. 任务执行完毕,非核心线程空闲超时自动回收,核心线程常驻复用

核心顺序:核心线程 → 队列 → 非核心线程 → 拒绝策略


四、四种内置线程池(Executors)

JDK自带四种常用线程池,封装好参数,开箱即用。

4.1 四种线程池特点与场景

线程池类型

特点

适用场景

newCachedThreadPool

无核心线程、最大线程无限、空闲60s回收

大量短时异步任务

newFixedThreadPool

固定线程数,无空闲回收

并发量稳定、长期任务

newSingleThreadExecutor

单线程,串行执行任务

任务需要有序执行

newScheduledThreadPool

支持延迟、定时任务

定时任务、轮询任务

生产禁忌:阿里巴巴规范禁止使用Executors创建线程池!容易OOM!

原因:部分线程池队列无限大、线程无限多,海量任务直接内存溢出


五、四大拒绝策略(面试必背)

线程池线程满、队列满,新任务触发拒绝策略,共四种:

5.1 四种策略详解

  • AbortPolicy(默认):直接抛出异常,中断任务(默认)

  • CallerRunsPolicy:谁提交的任务,谁自己执行(主线程执行)

  • DiscardPolicy:直接丢弃任务,不报错、不执行

  • DiscardOldestPolicy:丢弃队列最老任务,执行当前新任务


六、线程池代码实战

6.1 基础使用案例

import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class ThreadPoolDemo { public static void main(String[] args) { // 创建固定5线程池 ExecutorService pool = Executors.newFixedThreadPool(5); // 提交10个任务 for (int i = 0; i < 10; i++) { pool.execute(() -> { System.out.println(Thread.currentThread().getName() + "执行任务"); }); } // 关闭线程池 pool.shutdown(); } }

6.2 生产级自定义线程池(推荐)

生产环境必须手动创建ThreadPoolExecutor,自定义参数,杜绝OOM。

import java.util.concurrent.*; public class DiyThreadPool { public static void main(String[] args) { // 自定义线程池,参数可控、安全稳定 ThreadPoolExecutor pool = new ThreadPoolExecutor( 5, 10, 3, TimeUnit.SECONDS, new ArrayBlockingQueue<>(20), Executors.defaultThreadFactory(), new ThreadPoolExecutor.AbortPolicy() ); // 提交任务 for (int i = 0; i < 30; i++) { pool.execute(() -> System.out.println(Thread.currentThread().getName()+"执行任务")); } pool.shutdown(); } }

七、线程池高频面试题汇总

  1. 为什么不用Executors?队列无限长/线程无限多,高并发导致OOM

  2. 线程池执行顺序?核心线程→队列→非核心线程→拒绝策略

  3. 核心线程会销毁吗?默认不会,常驻复用

  4. 非核心线程什么时候销毁?空闲超时自动回收

  5. 四种拒绝策略各自场景?熟记四种策略行为

  6. 线程池如何合理配置参数?CPU密集型、IO密集型区分设置

7.1 线程池参数配置经验(工作实用)

  • CPU密集型:核心线程数 = CPU核心数+1

  • IO密集型:核心线程数 = CPU核心数*2


八、本篇总结 & 多线程板块终总结

8.1 本篇总结

  • 线程池核心优势:复用线程、控并发、防OOM、提性能

  • 七大参数是线程池灵魂,必须熟记

  • 工作流程:核心线程→队列→非核心线程→拒绝策略

  • 禁止使用Executors,生产必须自定义ThreadPoolExecutor

  • 四大拒绝策略适配不同业务容错场景

8.2 多线程全套终总结

到此,Java多线程板块彻底完结

我们从零通关:线程基础、线程安全、锁机制、volatile、线程通信、线程池全部核心知识点。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/6 20:56:47

TMS320F28379D笔记4:CAN通信的收发配置

今日配置下CAN通信&#xff0c;顺带理解下CAN 的一些基础知识 目录 CAN基础知识&#xff1a; CAN控制器 CAN收发器 CAN总线上的0和1 CAN通信示波器信号直观感受&#xff1a; CAN盒与MCU的连接&#xff1a; Ti 例程代码注意点&#xff1a; 代码贴出&#xff1a; #include "…

作者头像 李华
网站建设 2026/6/6 20:55:40

终极宝可梦随机化工具:Universal Pokemon Randomizer ZX 完整指南

终极宝可梦随机化工具&#xff1a;Universal Pokemon Randomizer ZX 完整指南 【免费下载链接】universal-pokemon-randomizer-zx Public repository of source code for the Universal Pokemon Randomizer ZX 项目地址: https://gitcode.com/gh_mirrors/un/universal-pokemo…

作者头像 李华
网站建设 2026/6/6 20:55:15

终极英雄联盟工具箱:三步实现智能游戏体验的完整指南

终极英雄联盟工具箱&#xff1a;三步实现智能游戏体验的完整指南 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power &#x1f680;. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 你是否曾经在英雄联盟的选人阶…

作者头像 李华
网站建设 2026/6/6 20:49:52

全国电动车工厂分布在哪些地区?主要产区数据梳理

电动车&#xff08;两轮电动自行车与轻型电动摩托车&#xff09;是过去二十年中国增长最快的消费品制造业之一。从最初几十家拼装厂&#xff0c;到如今规模以上工厂超过三千家&#xff0c;这条产业链的地理分布既有历史路径依赖&#xff0c;也在近几年悄然位移。天下工厂是覆盖…

作者头像 李华