ThreadPoolExecutor

一.ThreadPoolExecutor

1.1 ThreadPoolExecutor参数

● corePoolSize : 核心线程数
● maximumPoolSize : 最大线程数
● keepAliveTime : 线程最大闲置生命周期
● unit : 针对keepAliveTime 的时间单位
● workQueue : 阻塞队列
● threadFactory : 创建线程的线程工程
● handler : 拒绝策略

1.2 工作原理

工作原理
解释
● 首先,当有任务要执行的时候,会计算线程池中存在的线程数量与核心线程数量(corePoolSize)进行比较,如果小于,则在线程池中创建线程.否则,进行下一步判断
●其次,如果不满足上面的条件,则会将任务添加到阻塞队列中,等待线程池的线程空闲下来,获取队列中的任务进行执行
●第三,如果队列中也塞满了任务,那么会计算线程池中存在的线程数量与最大线程数量(maxnumPoolSize)进行比较,如果小于,则在线程池中创建线程
●最后如果上面都不满足,则会执行对应的拒绝策略(1.5拒绝策略)

1.3 拒绝策略

AbortPolicy : 丢弃任务并抛出RejectedExectutionException
DiscardPolicy : 丢弃任务,但是不抛出异常
DiscardOldestPolicy : 丢弃队列中最前面的任务,然后重新尝试执行任务
CallerRunsPolicy : 由调用线程处理

1.4 任务队列BlockingQueue

● ArrayBlockingQueue
它是一个有界的阻塞队列,内部实现是将对象放到一个数组里,一旦初始化,大小无法修改
● LinkedBlockingQueue
内部以一个链式结构(链接节点)对其元素进行存储,可以指定元素上限,构造,上线则位integer.MAX_VALUE
● DelayQueue
对元素进行持有直到一个特定的延迟到期,进入其中的元素必须实现Delayed接口
● PriorityBlockingQueue
无界的并发队列,无法向这个队列插入null值,所欲哦插入到这个队列中的元素必须实现Comparable接口,因此该队列中元素的排序取决于Comparable实现
● SynchronousQueue
它是一个特殊的队列,它的内部只能容纳单个元素,如果该队列已有一个元素的话,那么试图向队列中插入一个新元素的线程将会阻塞,直到另一个新线程将该元素从队列中抽走

1.5 ThreadPoolTaskExecutor和ThreadPoolExecutor区别

ThreadPoolExecutor是jdk自带的线程池创建方法
ThreadPoolTaskExecutor 是Spring 对ThreadPoolExecutor进行封装之后的处理

二.Executors

2.1 Executors提供的线程池模板

在这里插入图片描述

● newCachedThreadPool
创建⼀个可缓存线程池,如果线程池⻓度超过处理需要,可灵活回收空闲线程,若⽆可回收,则新建线程。
● newFixedThreadPool
创建⼀个定⻓线程池,可控制线程最⼤并发数,超出的线程会在队列中等待。
● newScheduledThreadPool
创建⼀个定⻓线程池,⽀持定时及周期性任务执⾏。
● newSingleThreadScheduleExecutor
创建⼀个单线程执⾏程序,它可安排在给定延迟后运⾏命令或者定期地执⾏。(注意,如果因为在关
闭前的执⾏期间出现失败⽽终⽌了此单个线程,那么如果需要,⼀个新线程会代替它执⾏后续的任
务)。可保证顺序地执⾏各个任务,并且在任意给定的时间不会有多个线程是活动的。与其他等效的
newScheduledThreadPool(1) 不同,可保证⽆需重新配置此⽅法所返回的执⾏程序即可使⽤其他的线
程。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值