线程池

ThreadPoolExecutor

corePoolSize:核心线程数量

maximumPoolSize:线程最大线程数

workQueue:阻塞队列,存储等待执行的任务,对线程运行过程产生重大影响


三个参数的关系:

如果线程数小于corePoolSize,直接创建新的线程处理任务,无论其他线程是否空闲。线程数量大于corePoolSize且小于maximumPoolSize时,只有当workQueue满的时候,才会创建新的线程,当workQueue没满时,任务进入workQueue队列。线程数大于maximumPoolSize,且workQueue满时会根据饱和策略rejectHandler做相应的处理。


allowCoreThreadTimeOut:是否允许核心线程超时退出,这里的时间就是keepAliveTime

1)如果该值为false,且线程数小于corePoolSize,核心线程不会超时退出;线程数大于corePoolSize,线程超时退出。

2)如果该值为true,无论线程多少,线程都会超时退出

keepAliveTime:线程没有任务执行时最多保持多久时间终止

unit:keepAliveTime的时间单位

threadFactory:线程工厂,用来创建线程

rejectHandler:当拒绝处理任务时的策略

1)直接抛出异常(默认策略)

2)调用者所在线程执行任务

3)丢弃队列中靠前(最久之前)的任务,并执行当前任务

4)直接丢弃任务


线程池的几种状态

running:可以处理新的任务和阻塞队列中的任务

shutdown:不接受新任务,可以处理阻塞队列中保存的任务(调用shutdown())

stop:不接受新任务,不处理阻塞队列中保存的任务(调用shutdownNow())


线程池的方法

execute():提交任务,交给线程池

submit():提交任务,能够返回执行结果 execute + Future

shutdown():闭关线程池,等待任务都执行完

shutdownNow():闭关线程池,不等待任务执行完


线程池类图


Executors.newCachedThreadPool

Executors.newFixedThreadPool

Executors.newScheduledThreadPool

Executors.newSingleThreadExecutor

上面的线程池都是通过ThreadPoolExecutor类中的构造函数创建的,只是传进的参数有所不同。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值