Java线程池

线程池是Java并发编程中的一个重要工具,通过复用已创建的线程来减少性能开销。线程池的核心类主要为ThreadPoolExecutor

线程池的七大参数

  • 核心线程数
    指的是线程池中始终保持存活的线程数。即使处于空闲状态也不会销毁。
  • 最大线程数
    指的是线程池中能创建的最大线程数量。
    当任务队列已满且当前线程数 < 最大线程数时,线程池就会继续创建线程。如果线程数已达到最大值,任务就会被拒绝。
  • 空闲时间
    指非核心线程在空闲状态下的存活时间。
    当当前线程数 > 核心线程数时,非核心线程在空闲时间后就会被销毁。
  • 时间单位
  • 任务队列
    常用三种:
    • ArrayBlockingQueue:有界队列,适用于有资源限制的场景。
    • LinkedBlockingQueue:无界队列,适用于任务量较大的场景。
    • SynchronousQueue:不存储任务的队列,适用于直接将任务传递给线程的场景。
      其它三种:
    • PriorityBlockingQueue:无界队列,按照任务优先级排序,适用于优先级调度场景
    • DelayQueue:无界队列,适用于定时任务、缓存过期场景
    • LinkedTransferQueue:无界队列,适用于高吞吐量、高并发场景。(支持并发访问)
  • 线程工厂
    用于创建线程池的线程。
    通过自定义工厂,可以设置线程名称、优先级、等,便于开发者管理。
  • 拒绝策略
    • AbortPolicy:抛出异常,拒绝任务。
    • CallerRunsPolicy:将任务交给线程的调用者执行。
    • DiscardPolicy:丢弃任务,不抛出异常。
    • DiscardOldestPolicy:丢弃任务队列中最旧的任务。