Java的线程池主要是指ThreadPoolExcuter类,主要有以下参数:

  1. corePoolSize:核心线程池大小
  2. maximumPoolSize: 最大线程池大小
  3. keepAliveTime: 非核心线程空闲时的存活时间
  4. workQueue:用来保存等待执行任务的阻塞队列
  5. threadFactory: 线程工厂,用来创建新的线程
  6. handler:线程池和阻塞队列满时的拒绝策略

线程池流程:

  1. 若核心线程池没满,则创建一个核心线程来执行任务
  2. 若核心线程池已满,则将新任务放进阻塞队列中
  3. 若核心线程池和阻塞队列均满,则创建非核心线程,从阻塞队列中弹出最前的任务执行
  4. 若到达最大线程池大小,阻塞队列已满,则执行拒绝策略

拒绝策略有以下几种:

  1. AbortPolicy:丢弃任务并抛出异常,这是线程池的默认拒绝策略
  2. DiscardPolicy:丢弃任务,不抛出异常
  3. DiscardOldestPolicy:抛出队列最前端的旧任务,然后重新提交任务
  4. CallersRunPolicy:由提交任务的线程处理该任务

Java提供的几种线程池:

  1. newCatchedThreadPool:用于创建可以无限扩大的线程池
  2. newFixedSizeThreadPool:创建一个有固定线程数的线程池,采用无界队列
  3. newSingleThreadPool: 创建一个单线程的线程池
  4. newScheduledThreadPool: 适用于执行延时或周期性任务