线程池

当向线程池提交一个任务后,线程池是如何处理这个任务的呢?

主要流程:
1.线程池判断核心线程池是否已满(即判断当前运行的线程数目是否少于corePoolSize),如果不是(少于corePoolSize),则创建一个新的工作线程来执行任务,即便其他空闲的基本线程能够执行新任务也会创建新线程,等到需要执行的任务数大于核心线程池大小时就不再创建;如果核心线程池已满(当前运行的线程数等于或多于corePoolSize),则进入下一个流程;

2.线程池判断工作队列(BlockingQueue)是否已满,如果工作队列没满,则将新提交的任务存储在工作队列里;如果工作队列已经满了,则进入下一个流程。

3.线程池判断线程池是否已满(判断当前运行的线程数目是否超过了maximumPoolSize),如果没有,则创建一个新的工作线程来执行任务;如果线程池已经满了(即创建新线程,将使当前运行的线程超出maximumPoolSize),则交给饱和策略来处理这个任务。

工作线程:线程池创建线程时,会将线程封装成工作线程Worker,Worker在执行完任务后,还会循环的获取工作队列里的任务来执行。

你可能感兴趣的:(线程池)