Java 并发系列七 : JDK ThreadPoolExecutor解析

前言

先来一个面试问题提提神,也是面试阿里必问的一个题目,当然本人也被问过,惊不惊奇,我也面试过阿里?哈哈哈

问题描述:

1、说下 ThreadPoolExecutor构造函数几个参数的含义

​ corePoolSize、maximumPoolSize、keepAliveTime、unit、workQueue、threadFactory、rejectedExecutionHandler

这个问题上篇文章已经做了详细的描述。

2、当向线程池中加入任务时,corePoolSize、maximumPoolSize 新线程的创建时一种什么样的关系?

  • 运行线程数<corePoolSize则创建新的线程池来执行提交的任务
  • 运行线程数>=corePoolSize则把该任务放入队列中
  • 队列已满且线程数<maximumPoolSize 则创建新的线程执行该任务
  • 队列已满且线程数>=maximumPoolSize 则执行线程的拒绝策略

怎么样?上面两个问题可以小试牛刀了吧!

下面再来逐步分析下:

对比我们自己实现的线程池,JDK 中的线程池多了哪些呢?

1、线程池数量定义了两种,核心线程池 、 非核心线程池,根据实际任务动态决定线程池的数量

corePoolSize、maximumPoolSize

2、1.6之后增加 属性 allowCoreThreadTimeOut 允许核心线程池也有过期时间,避免过多资源占用

3、增加了 RejectedExecutionHandler ,当线程池数量已经最大并且任务队列已满,执行拒绝策略

4、提供了钩子beforeExecute 、afterExecute ,用于 任务的前后执行

源码参考链接:

1、https://www.throwable.club/2019/07/15/java-concurrency-thread-pool-executor/

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容