线程池

线程池是用来管理和复用线程的工具,它可以减少线程的创建和销毁开销。

1. 线程池的工作流程

任务提交 → 核心线程执行 → 任务队列缓存 → 非核心线程执行 → 拒绝策略处理。

‼️

第一步,线程池通过 submit() 提交任务。

第二步,线程池会先创建核心线程来执行任务。

第三步,如果核心线程都在忙,任务会被放入任务队列中。

第四步,如果任务队列已满,且当前线程数量小于最大线程数,线程池会创建新的线程来处理任务。

第五步,如果线程池中的线程数量已经达到最大线程数,且任务队列已满,线程池会执行拒绝策略。

2. 线程池的主要参数有哪些

线程池有 7 个参数,需要重点关注的有核心线程数、最大线程数、等待队列、拒绝策略。
1、corePoolSize:核心线程数,⻓期存活,执行任务的主力。
2、maximumPoolSize:线程池允许的最大线程数。
3、workQueue:任务队列,存储等待执行的任务。
4、handler:拒绝策略,任务超载时的处理方式。也就是线程数达到 maximumPoolSiz,任务队列也满了的时 候,就会触发拒绝策略。
5、threadFactory:线程工厂,用于创建线程,可自定义线程名。
6、keepAliveTime:非核心线程的存活时间,空闲时间超过该值就销毁。
7、unit:keepAliveTime 参数的时间单位。

3. 线程池的拒绝策略(也叫饱和策略)有哪些? 
有四种:
AbortPolicy:默认的拒绝策略,会抛 RejectedExecutionException 异常。
CallerRunsPolicy:让提交任务的线程自己来执行这个任务,也就是调用 execute 方法的线程。
DiscardOldestPolicy:等待队列会丢弃队列中最老的一个任务,也就是队列中等待最久的任务,然后尝试重 新提交被拒绝的任务。
DiscardPolicy:丢弃被拒绝的任务,不做任何处理也不抛出异常。

全部评论

相关推荐

03-06 22:05
已编辑
门头沟学院 Web前端
我是2月23号开始投简历的,投出去基本没回应,到现在只有3场面试,之前已经错过了秋招,所以想争取春招冲一冲;我想请牛友们,各位佬,看看我的简历,春招可以冲中小厂吗?2月底投出去的简历基本直接被拒,惨~目前我的进度是八股文看了很多,刷了30+算法题(弱爆啦),场景题基本没碰可能会G,常见手撕题敲了一遍(记不住,大概率G);项目很可能经不住深度拷打,还在加强学习。如果屏幕前的牛友们愿意给出建议,请畅所欲言,我一定认真阅读。毕设也欢迎各位佬直接开喷,链接:https://github.com/bignosecss/reverse-roadmap---一周过去了,更新下这周的春招的投递情况吧。这周总共约了4场面试,都是小公司;面试八股很少,没有手撕和算法,问场景和项目里的细节比较多。一家面了之后没消息了,一家二面挂,另外两家面试体验非常棒,面试官还会解答没答上的问题,总体来说反馈比2月份多不少,要简历的也多了。在招聘网站上投了很多,大多未读和已读不回,或者要了简历不回复的。邮箱、官网的投递基本没有声响,大海里扔石头,没声儿。。。感觉今年春招真的很难了,投出去没有水花,有力气没处使;不管是小厂中厂,投出去大多没回应,倒是很多外包找。不知道大问题在哪,感觉简历写的也差不多,不知道怎么继续优化了。总之每天保持学习节奏,不停的投,坚持到春招结束,相信会有机会的!
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务