ThreadPoolExecutor记录

本文详细阐述了线程池的基本工作流程,包括线程的创建、Keep-alive时间设定及不同队列类型的特性。同时,介绍了四种拒绝任务策略,并探讨了钩子方法的应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基本工作流程:
当一个任务提交时,如果当前启动的线程数小于核心线程数量,则启动新的线程处理任务,即使其他线程时空闲状态.当大于核心线程数量且小于最大线程数量,并且当队列满了时创建新线程进行处理.

线程池工作线程创建:
工作线程创建使用的ThreadFactory.如果没有特殊定义,使用DefaultThreadFactory工厂进行创建,默认工厂创建的线程有相同的ThreadGroup,非守护型,正常优先级别.可以自定义线程工厂,设置新线程的名字,线程组,守护类型,优先级别.

Keep-alive时间:
线程大于核心线程数量时,当业务减少,空闲超过指定时间后,终止线程.可以通过allowCoreThreadTimeOut参数设置空闲策略引用于核心线程.

三种常用队列:
SynchronousQueue:同步队列,直接传递任务到线程,如果没有线程处理将会失败.一般配置线程最大值无边界.
LinkedBlockingQueue:无边界队列.一般适用于固定线程池大小的实现.因为队列打不到full状态,从而无法创建大于核心线程数量的数量.
ArrayBlockingQueue:有边界队列.

拒绝任务策略:
AbortPolicy:抛出异常
CallerRunsPolicy:调用者自己执行
DiscardPolicy:直接丢弃
DiscardOldestPolicy:丢弃时间最久的

Hook methods:
beforeExecute(Thread, Runnable)
afterExecute(Runnable, Throwable)
再线程执行前后执行,可以用于清理Threadlocal,搜集执行信息等.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值