线程池相关知识

线程池的7大参数

一、 corePoolSize 线程池核心线程大小
核心线程永远不会销毁,即使他们处于空闲状态,除非设置了allowCoreThreadTimeOut。任务提交到线程池后,首先会检查当前线程数是否达到了corePoolSize,如果没有达到的话,则会创建一个新线程来处理这个任务。(即使线程池中有空闲着的线程)

二、maximumPoolSize 线程池最大线程数量

当前线程数达到corePoolSize后,如果继续有任务被提交到线程池,会将任务缓存到工作队列(后面会介绍)中。如果队列也已满,则会去创建一个新线程来出来这个处理。线程池不会无限制的去创建新线程,它会有一个最大线程数量的限制,这个数量即由maximunPoolSize指定。

三、keepAliveTime (救急线程)存活时间
救急线程(临时工)
救急线程在空闲了指定时间后,救急线程会被销毁,这里的指定时间由keepAliveTime来设定

四、unit 救急线程存活时间单位
keepAliveTime的计量单位

五、workQueue 工作队列
新任务被提交后,会先进入到此工作队列中,任务调度时再从队列中取出任务。
常见阻塞队列
1.ArrayBlockingQueue:基于数组结构的有界阻塞队列,FIFO。
2.LinkedBlockingQueue:基于链表结构的有界阻塞队列, FIFO。
3.DelayedWorkQueue :是一个优先级队列,它可以保证每次出队的任务都是当前队列中执行时间最靠前的
4.SynchronousQueue:不存储元素的阻塞队列,每个插入操作都必须等待一个移出操作。

ArrayBlockingQueue与LinkedBlockingQueue区别
ArrayBlockingQueue底层是数组,队列有界,创建时需给出队列容量
LinkedBlockingQueue底层是单向链表,创建是可以给出队列容量,也可以不给出队列容量(不给出就是无限长)

六、threadFactory 线程工厂
创建一个新线程时使用的工厂,可以用来设定线程名、是否为daemon线程等等
七、handler 拒绝策略
在这里插入图片描述
自定义线程池的参数创建线程池
在这里插入图片描述
往线程池中添加任务的过程
核心线程:核心线程永远不会销毁,即使他们处于空闲状态
工作队列:核心线程都在忙时,先把任务存到工作队列中,这时核心线程努力一下还能处理过来。
救急线程(临时工):核心线程都在处理任务,缓存队列也被存满了,说明任务真的太多处理不过来了,这时创建救急线程。(临时工)

1.当线程池中的线程数量<核心线程数量时,每添加一个任务,就会创建一个新的线程执行这个任务(不论线程池中的线程是否处于空闲状态)
2.当线程池中的线程数量=核心线程数量时(线程池无空闲),每添加一个任务就把这个任务放入缓存队列。
3.当线程池中线程数量>=核心线程数量,并且缓存队列也被存满时,再添加的任务,会创建救急线程(临时工)来处理新任务。
4.当线程池中线程数量=最大线程数量,并且缓存队列也被存满时,再添加任务会触发拒绝策略。

救急线程回收:当线程池中线程数量>核心线程数量,并且某一条救急线程的空闲时间超过一定时间,就会把这条线程当做救急线程回收。

如何确定线程池的核心线程数

在这里插入图片描述

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值