首页 > 试题广场 >

详细描述ThreadPoolExecutor的各个参数的含义

[问答题]
详细描述ThreadPoolExecutor的各个参数的含义,介绍一个任务提交到线程池后的执行流程。
ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,TimeUnit unit,BlockingQueue<Runnable> workQueue ,ThreadFactory threadFactory,RejectedExecutionHandler handler)
1.corePoolSize:核心线程池大小
2.maximumPoolSize:最大线程池大小
3.keepAliveTime:线程最大空闲时间
4.unit:时间单位
5.workQueue:线程等待队列
6.threadFactory:线程创建工厂
7handler:拒绝策略
执行流程:
当在execute(Runnable)方法中提交新任务并且少于corePoolSize线程正在运行时,即使其他工作线程处于空闲状态,会创建一个新线程来处理该请求。如果有多于corePoolSize但小于maximumPoolSize线程正在运行,则仅当队列已满时才会创建新线程。如果maximumPoolSize达到最大值会执行拒绝策略。
发表于 2021-01-29 10:46:16 回复(0)
核心线程数 表示线程池的常驻核心线程数。刚提交任务的时候,每来一个任务就会创建一个线程,直到达到核心线程数。
最大线程数 用于表示线程池最大能维护的线程数量
过期时间 非核心线程的过期时间
过期单位 非核心线程的过期单位
线程工厂 用来方便标记所使用的线程
任务队列 用来存放未执行的任务
拒绝策略 如果当前线程数达到最大线程数,那么后面的任务将没有可以执行的线程,会根据这个参数执行策略来处理这个任务
   4种策略 1.报错
                  2.让启动线程池的线程执行
                   3.丢掉
                    4.丢掉最早的任务
                
任务提交的流程:首先判断当前线程池里的线程是否大于核心线程数,如果小于,则创建新线程执行任务,如果大于,则看任务队列中能否放下,如果放得下,就放入任务队列中等待被执行,如果放不下,就看是否大于最大线程数,如果小于则继续创建线程执行任务,如果大于了最大线程数,则执行拒绝策略。

发表于 2021-02-17 21:03:26 回复(0)
public ThreadPoolExecutor(int CorePoolSize, int MaximumPoolSize, long unit, BlockingQueue<Runnable> workQueue, ThreadFactory threadFactory, RejectedExecutionHandler handler){ //functions }
序号          名称                      类型                        含义
1          corePoolSize                int                    核心线程池大小
2          maximumPoolSize              int                    最大线程池大小
3          keepAliveTime                long            线程最大空闲时间
4             unit                   TimeUnit                       时间单位
5           workQueue          BlockingQueue<Runnable>     线程等待队列
6         threadFactory            ThreadFactory             线程创建工厂
	
7     handler     RejectedExecutionHandler     拒绝策略
新线程加入的三种情况 -> 空闲             ->      执行;
                       都在工作          ->       排队;
                       都在工作&队排满了  ->      new线程,执行
                       池子满了&队排满了  ->      do nothing
                       

1. if current thread count < corePoolSize,                            Run
    
2. if current thread count = corePoolSize,                             Wait(Add to workQueue)

3. if current thread count = corePoolSize & workQueue is full,         Add New Thread and Run(count <maxPoolSize)

4. if current thread count = maxiumPoolSize & workQueue is full,       Do nothing

发表于 2021-07-05 18:45:52 回复(0)
TheadPoolExecutor一共有7个参数,分别是:
1.int corePoolSize(核心线程池大小)
2. int maximumPoolSize(最大核心线程池大小)
3.long keepAliveTime(超时没有人调用就会释放)
4.TimeUnit unit(超时单位)
5.BlockingQueue<Runnale> workQueue(阻塞队列)
6.ThreadFactory threadFactory(线程工厂,用来创建线程的)
7.RejectedExecutionHandler handler(拒绝策略)

发表于 2021-06-28 15:32:16 回复(0)
ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,TimeUnit unit,BlockingQueue workQueue ,ThreadFactory threadFactory,RejectedExecutionHandler handler)

corePoolSize:线程池基本大小,没有任务执行时池子的大小

maximumPoolSize:线程最大大小,表示可同时活动的线程数量上限

keepAliveTime:线程最大空闲时间,线程空闲时间超过该值将标记为可回收

unit:线程最大空闲时间的时间单位

workQueue:线程队列,该队列满后线程池会创建超出 corePoolSize 大小的线程数量

threadFactory:线程创建工厂,在线程池需要创建一个线程时会用到

hander:拒绝策略,有 AbortPolicy,CallerRunsPolicy,DiscardPolicy,DiscardOldestPolicy

任务提交到线程池后的执行流程

图片说明

发表于 2021-02-20 12:34:10 回复(0)
corePoolSize 核心线程数
maximumPoolSize 最大线程数
keepAliveTime 当maximumPoolSize大于corePoolSize 时,非核心线程多长时间被摧毁
aliveUnit keepAliveTime的时间单位
workQueue 任务队列
threadFactory 创建线程的工厂
handler 线程数量超过最大线程的处理策略

任务交到线程池,判断核心线程数是否已满,如果未满则直接创建核心线程 如果已满则判断任务队列是否未有界队列,如果否则加入队列,如果是则判断队列是否已满,未满则加入队列,已满则判断线程池是否已满,已满则执行失败处理策略 ,未满则创建非核心线程
发表于 2021-02-20 10:10:59 回复(0)
  • corePoolSize:线程池的核心大小,也可以理解为最小的线程池大小。

  • maximumPoolSize:最大线程池大小。

  • keepAliveTime:空余线程存活时间,指的是超过corePoolSize的空余线程达到多长时间才进行销毁。

  • unit:销毁时间单位。

  • workQueue:存储等待执行线程的工作队列。

  • threadFactory:创建线程的工厂,一般用默认即可。

  • handler:拒绝策略,当工作队列、线程池全已满时如何拒绝新任务,默认抛出异常。

编辑于 2021-01-22 15:48:06 回复(0)