ThreadPoolExecutor参数工作方式

在这里插入图片描述

corePoolSize 线程池中核心线程数的最大值

maximumPoolSize 线程池中能拥有最多线程数

keepAliveTime 表示空闲线程的存活时间

TimeUnitunit 表示keepAliveTime的单位

workQueue 用于缓存任务的阻塞队列

  1. ArrayBlockingQueue:是一个基于数组结构的有界阻塞队列,此队列按 FIFO(先进先出)原则对元素进行排序。
  2. LinkedBlockingQueue:一个基于链表结构的阻塞队列,此队列按FIFO (先进先出) 排序元素,吞吐量通常要高于ArrayBlockingQueue。静态工厂方法Executors.newFixedThreadPool()使用了这个队列
  3. SynchronousQueue:一个不存储元素的阻塞队列。每个插入操作必须等到另一个线程调用移除操作,否则插入操作一直处于阻塞状态,吞吐量通常要高于LinkedBlockingQueue,静态工厂方法Executors.newCachedThreadPool使用了这个队列。
  4. PriorityBlockingQueue:一个具有优先级的无限阻塞队列。

handler 表示当workQueue已满,且池中的线程数达到maximumPoolSize时,线程池拒绝添加新任务时采取的策略。(拒绝策略)

查看线程数的方法
ThreadPoolExecutor.getQueue().size()
ThreadPoolExecutor.getActiveCount()

线程池的工作方式

  1. 如果运行的线程少于 corePoolSize,则 Executor 始终首选添加新的线程,而不进行排队。(少于核心线程数,直接执行)
  2. 如果运行的线程等于或多于 corePoolSize,首选将请求加入队列,而不添加新的线程。
  3. 如果无法将请求加入队列(队列已满),则增加核心线程数到maximumPoolSize,若核心线程数超出 maximumPoolSize,在这种情况下,新的任务将被拒绝。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值