线程池的执行流程

线程池通过ThreadPoolExecutor创建,参数包括核心线程数、最大线程数、存活时间等。当提交任务时,若线程数小于核心线程数,会创建新线程执行;否则任务进入工作队列。若工作队列满且线程数未达最大值,仍会创建新线程;否则应用拒绝策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.线程池的配置参数

通过对创建线程池的ThreadPoolExecutor类源码阅读我们发现,创建线程池会传入七个参数,让我们来依次了解一下各个参数的具体含义:

corePoolSize:核心线程数,可以理解为线程池维护的最小线程数量,核心线程创建后不会被回收。大于核心线程数的线程,在空闲时间超过keepAliveTime后会被回收。
 maximumPoolSize最大线程数,线程池允许创建的最大线程数量;(包含核心线程池数量)
 keepAliveTime:非核心线程存活时间,当一个可被回收的线程的空闲时间大A于keepAliveTime,就会被回收。
 unit:非核心线程存活时间的时间单位
workQueue:工作队列,用于存储等待执行的线程任务
threadFactory:线程工厂,用于创建线程,以及自定义线程名称,需要实现ThreadFactory接口;
RejectedExecutionHandler:拒绝策略,当线程池线程内的线程耗尽,并且工作队列达到已满时,新提交的任务,将使用拒绝策略进行处理。

 public ThreadPoolExecutor(int corePoolSize,
                              int maximumPoolSize,
                              long keepAliveTime,
                              TimeUnit unit,
                              BlockingQueue<Runnable> workQueue,
                              ThreadFactory threadFactory,
                              RejectedExecutionHandler handler) {
        if (corePoolSize < 0 ||
            maximumPoolSize <= 0 ||
            maximumPoolSize < corePoolSize ||
            keepAliveTime < 0)
            throw new IllegalArgumentException();
        if (workQueue == null || threadFactory == null || handler == null)
            throw new NullPointerException();
        this.acc = System.getSecurityManager() == null ?
                null :
                AccessController.getContext();
        this.corePoolSize = corePoolSize;
        this.maximumPoolSize = maximumPoolSize;
        this.workQueue = workQueue;
        this.keepAliveTime = unit.toNanos(keepAliveTime);
        this.threadFactory = threadFactory;
        this.handler = handler;
    }

二.线程池的执行流程

        了解了线程池的创建参数,我们便可以得知线程执行流程的各个关键节点,首先当提交了一下新的线程任务时,会对线程的当前存活线程数进行判断,如果小于核心线程数,则分配线程执行线程任务,否则会将提交的线程任务放入工作队列中等待线程任务的执行,如果工作队列已满,则会判断当前存活线程数是否小于最大线程数,如果小于最大线程数,则创建新的线程来执行线程任务,否则会对线程任务执行拒绝策略。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

‏猿究院Sublate

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值