Java并发类库中的线程池


一、Executor框架的基本组成

在这里插入图片描述
ForkJoinPool主要是把我们的任务细分成多个小任务,根据CPU多核处理能力,把任务分配到多个核心上处理,最后再合并返回。
ScheduledThreadPoolExecutor主要是对上面的线程池做了增强,加了调度的逻辑。

建议使用Executors创建线程池,里面的方法封装了上面几个线程池。

ThreadPoolExecutor

线程池的创建参数详解

corePoolSize - 线程池核心池的大小,
maximumPoolSIze - 线程池的最大线程数,临时扩充的线程数不会超过它
keepAliveTime - 当线程数大于核心时,此为终止前多余的空闲线程等待任务的最长时间
unit - keepAliveTime的时间单位,一般为毫秒或者秒
workQueue - 用来储存等待执行任务的队列,设置任务缓存的队列,大小根据具体需要来,任务在线程已经处理不过来了,就会放到任务缓存队列里面,等线程把手里的任务处理完,会去缓存队列里面看还有没有等待处理任务,如果核心空闲了就会把任务取出来处理
threadFactory - 线程工厂,提供对线程的创建和管理等
RejectedExecutionHandler - 饱和策略,所有线程数已经满了,任务缓存队列也满了,这时候已经没有办法去接受新的任务了,这时候就需要自定义一个饱和策略来处理。

线程池大小选择策略

在这里插入图片描述

线程池工作流程

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
当线程数量没有超过corePoolSize时,先创建线程知道达到corePoolSize,核心线程数已经满了时,新提交的任务就不会创建新的线程,会放入任务缓存队列中,当任务缓存队列(工作队列)也满了之后,这时就会继续创建新的线程用来处理任务,一直达到maxumumPoolSize,线程池总共可以处理15个任务。

当任务中的任务达到20个
在这里插入图片描述
工作线程,缓存队列都满了,新添加的任务就会被拒绝,拒绝处理的机制就是饱和策略,没有自定义会抛出任务已满的异常。

二、线程池工作流程

三、线程池实例分析

总结

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值