线程池(ThreadPoolExecutor)的七大参数

4种常见的线程池创建方式这篇文章里,通过查看源码发现,线程池的创建底层都是通过下面这个方法实现的,这个方法里有七个参数,也是面试中常常问到的知识点。

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;
    }

这个方法的七个参数都是什么意义呢?

  1. corePoolSize:常驻核心线程数,也就是说这是线程池中始终存活的线程,不会被销毁,除非关闭线程池。
  2. maximumPoolSize:最大线程数,线程池中最多能存活的线程数。
  3. keepAliveTime:空闲线程存活时间,配合下一个参数unit(空闲线程存活时间单位)使用。假如keepAliveTime=5L(注意:类型为long),unit = TimeUnit.SECONDS,则某个线程在5s时间里没有处理任何请求,将会被线程池销毁,当然是在线程池中线程数大于常驻核心线程数的情况下。
  4. unit:空闲线程存活时间的单位,如TimeUnit.SECONDS、TimeUnit.MILLISECONDS等。
  5. workQueue:工作队列(阻塞队列),简单来说,队列的容量决定了能有多少请求被阻塞队列接受。线程池达到最大线程数在处理请求,接下来的请求就会被放入阻塞队列等待处理。
  6. threadFactory:线程工厂,一般使用默认Executors.defaultThreadFactory()即可。
  7. handler:线程池的拒绝策略。当等待队列已经满了,再也塞不下新的任务,同时,线程池也达到max线程了,无法为新任务服务,这时,我们需要拒绝策略机制合理的处理这个问题。

关于最后一个拒绝策略的详细内容,可以看我的另一篇文章

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值