Java Executor 线程处理方式 - guguoyi/WorkLine GitHub Wiki

1.重要参数

  • corePoolSize : 线程池中所保存的核心线程数,包扩空闲线程
  • maximumPoolSize : 池中允许的最大线程数
  • keepAliveTime: 线程池中的空闲线程所能待的最长时间
  • unit: 持续时间的单位
  • workQueue:任务执行前保存任务的队列, 仅保存由execute方法提交的Runnable任务

2.线程创建的处理方式

if (threadnum < corePoolSize) {
     即使池中有空闲线程,依然创建新线程来处理新任务
} else if (workQueue is not full) {
    添加新任务到workQueue, 根据FIFO原则,等待空闲线程执行
} if (workQueue is full) {
   if (threadNum < maxmumPoolSize) {
       创建新线程执行新任务
   }
} 

3.线程排队策略

  1. 直接提交, 缓冲队列采用SynchronousQueue, 它将任务直接交给线程而不保持他们。 如果不存在可用于执行的线程,则试图把任务加入到缓冲队列将会失败,因此会创建一个新的线程来处理新添加的任务。newCachedThreadPool 采用的就是这种策略
  2. 无界队列。 无效的maximumPoolSize. newFixedThreadPool
  3. 有界队列。 有限的maximumPoolSize.