【java基础】线程池详解

线程池创建的参数

public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue workQueue,ThreadFactory threadFactory, RejectedExecutionHandler handler)

参数解释:
corePoolSize 线程池中工作的核心数量
maximumPoolSize 线程池中的最大线程数
keepAliveTime 超出 corePoolSize 后创建的线程存活时间或者是所有线程最大存活时间,取决于配置
unit keepAliveTime的时间单位
workQueue 阻塞队列(任务队列)
threadFactory 创建线程所用的工厂
handler 拒绝策略,线程满足最大要求时,调用该方法处理

线程池执行流程

线程池执行过程

线程池如何超时退出

allowCoreThreadTimeOut
workQueue.poll(keepAliveTime, TimeUnit.NANOSECONDS)
超时退出机制

线程池五种状态

-1 Running ||线程池创建时就是这个状态,能够接收新任务,以及对已添加的任务进行处理。
0 Shutdown ||调用shutdown方法线程池就会转换成SHUTDOWN状态,此时线程池不再接收新任务,但能继续处理已添加的任务到队列中任务。
1 Stop ||调用shutdownNow方法线程池就会转换成STOP状态,不接收新任务,也不能继续处理已添加的任务到队列中任务,并且会尝试中断正在处理的任务的线程。
2 Tidying ||SHUTDOWN/ STOP 状态下,任务数为 0, 其他所有任务已终止,线程池会变为 TIDYING 状态
3 Terminated ||线程池在 TIDYING 状态执行完 terminated() 方法就会转变为 TERMINATED 状态
线程五种状态图

使用场景

通常手动使用继承Thread或者实现Runnable接口的方式来创建线程,那样就会导致频繁创建及销毁线程,同时创建过多的线程也可能引发资源耗尽的风险。所以在这种情况下,使用线程池是一种更合理的选择,方便管理任务,实现了线程的重复利用。所以线程池一般适合那种需要异步或者多线程处理任务的场景。

参考文献:线程池详解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值