并发编程1-线程池实现原理解析

34 篇文章 0 订阅

1、线程池的实现原理:

1)、当线程池初始化时,线程池里没有线程,当提交一个任务到线程池后,判断核心线程池里的线程数是否达到corePoolSize,如果没有则进行创建一个新的工作线程来执行任务。

2)、如果核心线程池已经满,则把任务准备添加到工作队列,判断工作队列是否已经满,如果没有满添加到工作队列等待线程来取;工作中的线程完成工作后会从工作队列取新的任务进行执行;

3)、如果工作队列满了则判断线程池线程线程数是否达到maximumuPoolSize,如果没有达到进行创建一个新的工作线程来执行任务。

4)、如果工作队列是有界队列,在工作队列满后,如果线程数已经达到maximumuPoolSize,则会把任务交给包含策略来处理。

5)、线程消亡,参数keepAliveTime配置为0时多余空闲线程会立即消亡,到配置60时,意味等待新任务最长时间为60S,超过60S空闲线程将销毁。

2、在不同的业务场景中,线程池参数如何设置?

性质不同的任务可以用不同的线程池分开处理。1)、CPU密集性的任务应尽量配置小的线程,如配置N(cpu)+1;2)、IO密集性的任务,由于IO阻塞线程不是一直在执行,则可以配置尽可能多的线程,如2*N(CPU)。3)、混合型的任务,如果可以拆分的话,将其拆分成一个CPU密集型的和一个IO密集性的任务,这样并发任务获得比较高的吞吐量。4|、有优先级不同的任务可以使用优先级队列来初始化线程池,让任务优先级高的任务优先执行。5)、依赖数据库连接池的任务,因为线程提交SQL后需要等待数据库结果返回,等待的时间越长,则CPU的空闲时间越长,那么线程数应该设置的越大。6)、建议使用有界队列初始化线程池。

3、线程池一般通过Executor框架进行工厂创建。

线程参数:

corePool、maximumPool、BlockingQueue、keepAliveTime、RejectedExceptionHandler




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值