通过一个完整的实际示例,配合线程池的源码流程讲解和图形化流程图,完整还原从任务提交到执行、再到线程回收的全过程。
🎯 示例目标
我们将使用 ThreadPoolExecutor
创建一个自定义线程池,并提交多个任务,逐步分析:
- 任务如何被接收;
- 线程如何创建;
- 任务如何入队;
- 线程复用机制;
- 拒绝策略触发(可选);
- 线程空闲回收;
- 最终关闭线程池。
✅ 示例代码:自定义线程池 + 多任务提交
import java.util.concurrent.*;
import java.util.concurrent.atomic.AtomicInteger;
public class ThreadPoolExample {
public static void main(String[] args) throws InterruptedException {
// 自定义线程池配置
int corePoolSize = 2;
int maximumPoolSize = 4;
long keepAliveTime = 10;
TimeUnit unit = TimeUnit.SECONDS;
BlockingQueue<Runnable> workQueue = new LinkedBlockingQueue<>(2);
ThreadFactory threadFactory = r -> {
AtomicInteger threadNumber = new