Excutor线程池原理详解

目录

一、线程池的创建以及参数

二、任务提交的方法

三、线程池参数解释

四、线程池原理

五、线程池原理图

六、execute方法执行流程图


一、线程池的创建以及参数

 public ThreadPoolExecutor(int corePoolSize, //核心线程数
                           int maximumPoolSize, //最大线程数
                           long keepAliveTime, //线程允许的空闲时间
                           TimeUnit unit, //keepAliveTime的时间单位
                           BlockingQueue<Runnable> workQueue, //阻塞队列
                           ThreadFactory threadFactory, //创建线程工厂
                           RejectedExecutionHandler handler  //拒绝策略) 

二、任务提交的方法

public void execute() //提交任务无返回值
public Future<?> submit() //任务执行完成后有返回值

三、线程池参数解释

corePoolSize:线程池中的核心线程数,当提交一个任务时,线程池创建一个新线程执行任务,直到当前线程数等于corePoolSize。

maximumPoolSize:线程池中允许的最大线程数。如果当前阻塞队列满了,且继续提交任务,则需要创建非核心线程数执行任务,核心线程数和非核心线程数的总数小于或者等于maximumPoolSize。

KeepAliveTime:线程池维护线程允许的空闲时间。当线程池中的线程数量大于corePoolSize,如果这时没有新的任务提交,核心线程外的线程不会立即销毁,会等到时间超过keepAliveTime之后销毁。

unit:keepAliveTime的时间单位。

workQueue:用来保存等待被执行任务的阻塞队列,且任务必须实现Runable接口。

threadFactory:用来创建线程。

handler:拒绝策略,①:AbortPolicy:直接抛出异常,默认策略,②:CallerRunsPolicy:用调用者所在的线程来执行任务,③:DiscardOldestPolicy:丢弃阻塞队列中靠最前的任务,并执行当前任务,④:DiscardPolicy:直接丢弃任务。

四、线程池原理

1、线程提交任务到线程池,线程池创建核心线程数,直到线程数等于corePoolSize;

2、由于线程池中线程数是核心线程数,再提交来的任务不会直接提交到线程池中线程,而是放到队列中,线程池中的线程去队列中获取任务;

3、如果阻塞队列满了,则开始创建非核心线程数来执行任务,线程数小于maximumPoolSize;

4、如果阻塞队列满了且线程数等于maximumPoolSize,那么需通过handler所指定的策略来处理任务;

5、当线程池中数量大于corePoolsize,如果某个非核心线程空闲时间超过KeepAliveTime,线程将被终止。

五、线程池原理图

六、execute方法执行流程图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值