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