Java并发20:ThreadPoolExecutor详解 - 深入线程池源码

核心参数详解 public ThreadPoolExecutor( int corePoolSize, // 核心线程数 int maximumPoolSize, // 最大线程数 long keepAliveTime, // 空闲线程存活时间 TimeUnit unit, // 时间单位 BlockingQueue<Runnable> workQueue, // 任务队列 ThreadFactory threadFactory, // 线程工厂 RejectedExecutionHandler handler // 拒绝策略 ) { ... } 参数说明 corePoolSize(核心线程数): 即使空闲也不会回收 除非设置allowCoreThreadTimeOut(true) maximumPoolSize(最大线程数): 队列满后创建的临时线程 空闲超过keepAliveTime后回收 workQueue(任务队列): // 1. 有界队列(推荐) new ArrayBlockingQueue<>(100) // 2. 无界队列(慎用) new LinkedBlockingQueue<>() // 可能OOM // 3. 同步队列(不存储) new SynchronousQueue<>() // 直接交付给线程 // 4. 优先级队列 new PriorityBlockingQueue<>() // 按优先级执行 任务提交流程 execute() vs submit(): ...

2025-11-20 · maneng

Java并发19:线程池核心原理 - 为什么需要线程池

为什么需要线程池? 直接创建线程的问题: // 每个请求创建一个线程 new Thread(() -> handleRequest()).start(); 三大问题: 创建/销毁开销大:线程创建需要约1MB栈空间,耗时1ms 资源无限制:可能创建上千个线程,耗尽内存 管理困难:无法统一管理和监控 线程池的优势: ✅ 线程复用,降低开销 ✅ 控制并发数,避免资源耗尽 ✅ 统一管理,便于监控 核心组件 public class ThreadPoolExecutor { // 核心参数 int corePoolSize; // 核心线程数 int maximumPoolSize; // 最大线程数 long keepAliveTime; // 空闲线程存活时间 BlockingQueue<Runnable> workQueue; // 任务队列 RejectedExecutionHandler handler; // 拒绝策略 } 工作流程 任务提交 ↓ 线程数 < corePoolSize? ├─ 是 → 创建核心线程执行 └─ 否 → 队列未满? ├─ 是 → 加入队列等待 └─ 否 → 线程数 < maximumPoolSize? ├─ 是 → 创建临时线程执行 └─ 否 → 执行拒绝策略 示例: ...

2025-11-20 · maneng

如约数科科技工作室

浙ICP备2025203501号

👀 本站总访问量 ...| 👤 访客数 ...| 📅 今日访问 ...