线程池ThreadPoolExecutor参数介绍、参数选型、任务执行流程

1、参数介绍

public ThreadPoolExecutor(int corePoolSize, 
                              int maximumPoolSize,
                              long keepAliveTime,  
                              TimeUnit unit,
                              BlockingQueue<Runnable> workQueue, 
                              ThreadFactory threadFactory, 
                              RejectedExecutionHandler handler)

corePoolSize:线程池核心线程数量

maximumPoolSize:线程池最大线程数量

keepAliveTime:表示线程没有任务执行时最多保持多久时间线程资源释放

unit:线程KeepAlive时间单位

workQueue:任务队列

(1)如果没有空闲的线程执行该任务且当前运行的线程数少于corePoolSize,则添加新的线程执行该任务。
(2)如果没有空闲的线程执行该任务且当前的线程数等于corePoolSize同时阻塞队列未满,则将任务入队列,而不添加新的线程。
(3)如果没有空闲的线程执行该任务且阻塞队列已满同时池中的线程数小于maximumPoolSize,则创建新的线程执行任务。
(4)如果没有空闲的线程执行该任务且阻塞队列已满同时池中的线程数等于maximumPoolSize,则执行对应的拒绝策略

常用的阻塞队列 结构 是否有界 是否有锁

ArrayBlockingQueue 数组 有界 有锁
LinkedBlockingQueue 链表 有界 有锁
LinkedBlockingDeque 链表 有界 有锁
PriorityBlockingQueue 数组的平衡二叉堆 有界 有锁
PriorityQueue 数组的平衡二叉堆 有界 有锁
DelayQueue 优先级队列 无界 有锁
SynchronousQueue 队列或栈 无界 有锁
LinkedTransferQueue 链表 无界 无锁
ConcurrentLinkedQueue 链表 无界 无锁

maximumPoolSize:则根据构造函数中的handler指定的策略来拒绝新的任务

threadFactory:创建线程的工厂对象

handler:任务被拒绝后调用的handler

(1)AbortPolicy
默认策略。使用该策略时,如果线程池队列满了丢掉这个任务并且抛出RejectedExecutionException异常。
(2)DiscardPolicy
如果线程池队列满了,会直接丢掉这个任务并且不会有任何异常
(3)DiscardOldestPolicy
当任务呗拒绝添加时,会抛弃任务队列中最旧的任务也就是最先加入队列的,再把这个新任务添加进去.因为队列是队尾进,队头出,所以队头元素是最老的,因此每次都是移除对头元素后再尝试入队。
(4)CallerRunsPolicy
在任务被拒绝添加后,会调用主线程去执行被拒绝的任务

2、任务提交执行流程

在这里插入图片描述

3、参数设置

默认值:

corePoolSize = 1
maxPoolSize = Integer.MAX_VALUE
queueCapacity = Integer.MAX_VALUE
keepAliveTime = 60s
allowCoreThreadTimeout = false
rejectedExecutionHandler = AbortPolicy()

corePoolSize:
cpu性能冗余大:cpu核心数+1
cpu性能冗余小:cpu核心数*2

maximumPoolSize:
tasks :每秒的任务数,假设为500~1000
taskcost:每个任务花费时间,假设为0.1s
responsetime:系统允许容忍的最大响应时间,假设为1s
maxPoolSize = (max(tasks)- queueCapacity)/(1/taskcost)

workQueue:
ArrayBlockingQueue:基于数组实现的有界的先进先出的阻塞队列
默认非公平吞吐量高,符合数组特性
LinkedBlockingQueue:基于链表实现的有界先进先出阻塞队列
吞吐量高,常用,符合链表特性

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值