《线程池的执行流程》

目录

什么是线程池

线程池的优点 

线程池的执行流程

线程池的状态 


什么是线程池

        线程池是一种多线程处理形式,内部维护了若干个线程。

        没有线程任务的时候,线程都处于空闲状态。如果有新的线程任务,就分配给空闲线程执行。如果所有线程都处于忙碌状态,线程池会创建新线程或者将线程任务放入工作队列中。

线程池的优点 

        1.避免了线程的重复创建,销毁,开销小。

        2.不用等线程创建,可以直接执行线程任务,速度快。

线程池的执行流程

        《线程池的执行流程》_第1张图片

        当提交线程任务后,线程池会判断是否存在空闲线程,如果存在空闲线程,会分配出空闲线程去执行线程任务。

        如果没有空闲线程,会判断核心线程数是否达到最大,如果没有就会创建核心线程并执行线程任务。

        如果线程数超过核心线程数,会判断工作队列是否已满,如果工作队列未满,将线程任务添加到工作队列。

        如果工作队列已满,会判断非核心线程数是否超出,如果未超出,创建非核心线程执行线程任务。

        如果非核心线程数也超出,那线程池将会拒绝执行。

        拒绝策略有四种:

                1.ThreadPoolExecutor.AbortPolicy:默认策略,丢弃任务并且抛出RejectedExecutionException异常。

                2.ThreadPoolExecutor.DiscardPolicy:丢弃任务,但是不会抛出异常。

                3.ThreadPoolExecutor.DiscardOldestPolicy:丢弃工作队列中队头任务。

                4.ThreadPoolExecutor.CallerRunsPolicy:由原调用线程处理该任务。 

线程池的状态 

        《线程池的执行流程》_第2张图片

        线程池有五种状态:

                Running(运行状态):当线程池创建后,线程池就处于运行状态。

                SHUTDOWN(关闭状态):在该状态下,线程池不再接收新的线程任务,但是会处理正在执行的线程任务与在工作队列的线程任务。

                STOP(停止状态):线程池不再接收新的线程任务,而且不会处理工作队列中的线程任务,正在执行的任务也会被中断。

                TIDYING(整理状态):此状态表明线程池中的所有线程任务都已运行终止。

                TERMINATED(终止状态):线程池关闭。

      

        

        

你可能感兴趣的:(JAVASE,java)