线程池—线程池中的参数与线程池的处理流程

线程池中的重要参数:

  1. corePoolSize:核心线程数,通俗的说就是队列没满时,最大线程并发数
  2. workQueue: 阻塞队列类型
  3. maximumPoolSizes:最大线程数,通俗的说就是当阻塞队列满了的时候,最大的并发数
  4. RejectedExecutionHandler:拒绝策略,当任务数超过maximumPoolSizes + workQueue 时,任务会触发拒绝策略。JDk有四种默认的拒绝策略,见最下面
  5. keepAliveTime:空闲时间多久会被回收的时间限制

线程池的处理流程

当一个任务来了的时候

  • 会先判断是否超过corePoolSize,如果没有超过,就新建一个线程执行任务并加入线程池线;若超过了corePoolSize则会尝试放入阻塞对列
  • 如果阻塞对列没有满,就在阻塞队列中等待执行,如果阻塞队列满了,就尝试新建一个线程处理
  • 如果线程池中的线程数没有超过了maximumPoolSizes最大线程数,则新建一个线程处理任务并加入到线程池中;如果超过maximumPoolSizes则会调用RejectedExecutionHandler拒绝策略处理
  • 空闲的线程(非核心线程)会在到达keepAliveTime时间之后没有被使用的话就被回收

拒绝策略

  1. CallerRunsPolicy:只要线程池不关闭,就执行任务
  2. AbortPolicy:丢弃任务,抛出运行时异常
  3. DiscardPolicy:直接忽视,什么也不发生
  4. DiscardOldestPolicy:将任务队列中最先进入的任务移除,并将新任务加入对列。
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
线程池是一种线程使用的优化技术,主要参数和工作流程如下: 主要参数: 1. corePoolSize:核心线程数目,池会保留的最多线程数。 2. maximumPoolSize:最大线程数目,核心线程+救急线程的最大数目。 3. keepAliveTime:生存时间,救急线程的生存时间,生存时间内没有新任务,此线程资源会释放。 4. unit:时间单位,救急线程的生存时间单位,如秒、毫秒等。 5. workQueue:当没有空闲核心线程时,新来任务会加入到此队列排队,队列满会创建救急线程执行任务。 6. threadFactory:线程工厂,可以定制线程对象的创建,例如设置线程名字、是否是守护线程等。 7. handler:拒绝策略,当所有线程都在繁忙,workQueue也放满时,会触发拒绝策略。 工作流程线程池内部是通过队列+线程实现的,当利用线程池执行任务时: 1. 如果此时线程池的线程数量小于corePoolSize,即使线程池的线程都处于空闲状态,也要创建新的线程来处理被添加的任务。 2. 如果此时线程池的线程数量等于corePoolSize,但是缓冲队列workQueue未满,那么任务被放入缓冲队列。 3. 如果此时线程池的线程数量大于等于corePoolSize,缓冲队列workQueue满,并且线程池的数量小于maximumPoolSize,建新的线程来处理被添加的任务。 4. 如果此时线程池的线程数量大于corePoolSize,缓冲队列workQueue满,并且线程池的数量等于maximumPoolSize,那么通过handler所指定的策略来处理此任务。 5. 当线程池的线程数量大于corePoolSize时,如果某线程空闲时间超过keepAliveTime,线程将被终止。这样,线程池可以动态的调整池的线程数。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值