Java线程池
Java线程池
线程池是Java并发编程中的一个重要工具,通过复用已创建的线程来减少性能开销。线程池的核心类主要为ThreadPoolExecutor。
线程池的七大参数
- 核心线程数 :
指的是线程池中始终保持存活的线程数。即使处于空闲状态也不会销毁。 - 最大线程数 :
指的是线程池中能创建的最大线程数量。
当任务队列已满且当前线程数 < 最大线程数时,线程池就会继续创建线程。如果线程数已达到最大值,任务就会被拒绝。 - 空闲时间 :
指非核心线程在空闲状态下的存活时间。
当当前线程数 > 核心线程数时,非核心线程在空闲时间后就会被销毁。 - 时间单位
- 任务队列 :
常用三种:ArrayBlockingQueue:有界队列,适用于有资源限制的场景。LinkedBlockingQueue:无界队列,适用于任务量较大的场景。SynchronousQueue:不存储任务的队列,适用于直接将任务传递给线程的场景。
其它三种:PriorityBlockingQueue:无界队列,按照任务优先级排序,适用于优先级调度场景DelayQueue:无界队列,适用于定时任务、缓存过期场景LinkedTransferQueue:无界队列,适用于高吞吐量、高并发场景。(支持并发访问)
- 线程工厂 :
用于创建线程池的线程。
通过自定义工厂,可以设置线程名称、优先级、等,便于开发者管理。 - 拒绝策略
AbortPolicy:抛出异常,拒绝任务。CallerRunsPolicy:将任务交给线程的调用者执行。DiscardPolicy:丢弃任务,不抛出异常。DiscardOldestPolicy:丢弃任务队列中最旧的任务。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Aromatic!



