线程池参数如何理解?大白话餐厅举例!

首先我们先来看下概念:

核心线程数(Core Pool Size): 线程池中能保持活动。。。

最大线程数(Maximum Pool Size): 线程池中允许存在的。。。

任务队列(Work Queue): 用来保存等待执行的任务的队列。当线程池。。。

线程存活时间(Keep Alive Time): 只有在线程池的线程数超过核心线程数。。。

确实有点麻烦去理解,那我来翻译一下:

我现在开了一家海底捞火锅店,假设每桌客人都点了拉面

核心线程数:拉面师傅

最大线程数:餐厅的座位

任务队列:美甲小姐姐

线程存活时间:临时雇来的拉面师傅工作时间

餐厅开始接待客人。。

客人如潮水般涌来,开始进店的客人安排上拉面师傅拉拉面。

拉面师傅都在忙,其他客人全都去做美甲,暂时稳住客人。

美甲小姐姐都在忙,赶紧去找临时拉面师傅,临时拉面师傅开始拉拉面。

所有座位全部坐满,拉面师傅照顾一批,美甲小姐姐照顾一批,临时拉面师傅照顾一批。

再有新客人进来就拒绝了。

拒绝客人后会有以下四种反应:

1.投诉海底捞总部,上级来处理这个问题。

2.受了一肚子气,憋在肚子里自己受。

3.不吃了。

4.找到里面美甲小姐姐照顾的客人,把它赶出去,自己坐下。

大家可以对比一下,原文是这样的

核心线程数(Core Pool Size): 线程池中能保持活动的最小线程数。即使线程处于空闲状态,核心线程也会一直存活,除非设置了适当的超时策略。

最大线程数(Maximum Pool Size): 线程池中允许存在的最大线程数。当任务队列满了且活动线程数达到核心线程数时,线程池会创建新的线程,直到达到最大线程数。超过最大线程数的任务将会根据拒绝策略进行处理。

任务队列(Work Queue): 用来保存等待执行的任务的队列。当线程池中的线程数达到核心线程数时,新任务会被放入任务队列中。如果任务队列已满,且线程数未达到最大线程数,则会创建新的线程来执行任务。

线程存活时间(Keep Alive Time): 只有在线程池的线程数超过核心线程数时,多出来的空闲线程才会根据这个参数来决定回收。

这些参数之间的关系如下:

当有新任务需要执行时,线程池会优先尝试使用核心线程来处理任务。

如果任务队列已满,且线程数未达到最大线程数,则会创建新的线程来处理任务。

当线程池中的线程数超过核心线程数,并且任务队列已满时,新任务会根据拒绝策略进行处理。

拒绝策略(Rejected Execution Handler)定义了当线程池无法执行新任务时采取的处理方式。常见的拒绝策略包括:

  • AbortPolicy(默认): 抛出 RejectedExecutionException 异常,阻止系统正常工作。
  • CallerRunsPolicy: 将任务返回给调用者,由调用者所在线程执行。
  • DiscardPolicy: 直接丢弃任务,不提供任何反馈。
  • DiscardOldestPolicy: 丢弃队列中等待时间最长的任务,然后尝试再次提交当前任务。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值