ThreadPoolExecutor

本文详细介绍了ThreadPoolExecutor线程池的相关参数,如核心线程数、最大线程数等,阐述了线程池的特性及不同情况下任务的处理方式。还介绍了shutdown()等方法的作用,常用的3种队列及其特点,以及4种拒绝策略。

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

public ThreadPoolExecutor(int corePoolSize,
                       int maximumPoolSize,
                              long keepAliveTime,
                              TimeUnit unit,
                              BlockingQueue<Runnable> workQueue,                  ThreadFactory threadFactory,
                              RejectedExecutionHandler handler) {}
  • corePoolSize: 线程池核心线程数
  • maximumPoolSize:线程池最大数
  • keepAliveTime: 空闲线程存活时间
  • unit: 时间单位
  • workQueue: 线程池所使用的缓冲队列
  • threadFactory:线程池创建线程使用的工厂
  • handler: 线程池对拒绝任务的处理策略

特性一:当池中正在运行的线程数(包括空闲线程)小于corePoolSize时,新建线程执行任务。

特性二:当池中正在运行的线程数大于等于corePoolSize时,新插入的任务进入workQueue排队(如果workQueue长度允许),等待空闲线程来执行

特性三:当队列里的任务数达到上限,并且池中正在运行的线程数小于maximumPoolSize对于新加入的任务,新建线程。

特性四:当队列里的任务数达到上限,并且池中正在运行的线程数等于maximumPoolSize对于新加入的任务,执行拒绝策略(线程池默认的拒绝策略是抛异常)。

 

 

shutdown()方法
当前任务继续执行,无法添加新的任务,否则将会抛出异常,当任务执行完成后,进程结束。

shutdownNow()方法
中断所有任务,并且抛出InterruptedException异常,前提是Runnable中使用

isShutdown()方法
作用是判断线程是否已经关闭,只要调用了shutdown()方法,isShutdown()方法的返回值就是true

isTerminating()和isTerminated()方法
如果程序处于shutdown 或shutdownNow 之后处于正在终止但尚未完全终止的过程中,调用方法 isTerminating(),返回true。
如果线程池关闭后,即任务都完成,则方法isTerminated()返回true。

 

使用ThreadPoolExecutor线程池的过程中,常用到3种队列
ArrayBlockingQueue、LinkedBlockingDeque和SynchronousQueue。
ArrayBlockingQueue和LinkedBlockingDeque类可以指定队列存储元素的个数,如果未指定个数,默认为 Integer.MAX_VALUE。

对于ArrayBlockingQueue和LinkedBlockingDeque队列
当任务数大于corePoolSize时,多出的部分将会被放入队列中,如果队列满了,将会判断当前线程池中的线程是否超过maximumPoolSize,如果不超过,创建新线程执行任务,如果超过,抛出异常。

对于SynchronousQueue队列
SynchronousQueue队列没有容量,当任务数量大于corePoolSize时,直接创建新的线程,当线程数量大于maximumPoolSize时,抛出异常。

拒绝策略:

  • AbortPolicy:当任务添加到线程池中被拒绝时,它将抛出RejectExecutionException异常。
  • CallerRunsPolicy:当任务添加到线程池中被拒绝时,会直接使用调用者的线程,执行当前任务,调用者的线程执行性能极有可能急剧下降,因此不建议这么做。
  • DiscardOldestPolicy:当任务添加到线程池中被拒绝时,线程池会放弃等待队列中最旧的未处理任务,然后将被拒绝的任务添加到等待队列中。
  • DiscardPolicy:当任务添加到线程池中被拒绝时,线程池将丢弃被拒绝的任务。

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值