线程池的执行流程

目录

一、什么是线程池

二、线程池的执行流程

1、线程池的参数

总结:


一、什么是线程池

        线程池,按照配置参数(核心线程数、最大线程数等)创建并管理若干线程对象的一种管理机制。程序中如果需要使用线程,将一个执行任务传给线程池,线程池就会使用一个空闲状态的线程来执行这个任务。执行结束以后,该线程并不会死亡,而是再次返回线程池中成为空闲状态,等待执行下一个任务。使用线程池可以很好地提高性能。

二、线程池的执行流程

1、线程池的参数

在理解线程池前首先要了解线程池的配置参数:

 public ThreadPoolExecutor(int corePoolSize,
                              int maximumPoolSize,
                              long keepAliveTime,
                              TimeUnit unit,
                              BlockingQueue workQueue,
                              ThreadFactory threadFactory) {
        this(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue,
             threadFactory, defaultHandler);
    }

corePoolSize线程池核心线程数:也可以理解为线程池维护的最小线程数量,核心线程创建后不会被回收。大于核心线程数的线程,在空闲时间超过keepAliveTime后会被回收;

maximumPoolSize线程池最大线程数:线程池允许创建的最大线程数量;(包含核心线程池数量)

keepAliveTime非核心线程线程存活时间:当一个可被回收的线程的空闲时间大于keepAliveTime,就会被回收。

TimeUnit时间单位:参数keepAliveTime的时间单位;

BlockingQueue阻塞工作队列:用来存储等待执行的任务;

ThreadFactory线程工厂 : 用于创建线程,以及自定义线程名称,需要实现ThreadFactory接口;

RejectedExecutionHandler拒绝策略:当线程池线程内的线程耗尽,并且工作队列达到已满时,新提交的任务,将使用拒绝策略进行处理; 

2、执行流程

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

 ps:这里借鉴的大神做的图

总结:

在线程池处理多线程并发时,执行过程如下:

        当提交线程任务后,首先判断是否有空闲的线程,如果有则直接分配执行;没有则查看核心线程是否超出,如果没有超出则创建新的核心线程进行分配处理,如果超出,则判断工作队列是否已满,未满则进入工作队列等待,如果已满则判断是否超出最大线程数。未超出则创建非核心线程进行分配处理,如果超出则执行拒绝操作。

你可能感兴趣的:(java,jvm,开发语言)