当线程池中线程核心满了,等待队列、最大线程数都慢了,就会走拒绝策略,实际上拒绝策略源码也很简单
CallerRunsPolicy、AbortPolicy、DiscardPolicy、DiscardOldestPolicy
看源码可以发现,CallerRunsPolicy就是直接执行Runnable方法,也就是主线程执行
2025-11-19T12:11:53.png
Abort Policy直接抛出错误
2025-11-19T12:12:03.png
DiscardPolicy则是静默的,直接不处理,外层也感知不到,也不会抛出异常
2025-11-19T12:12:15.png
DiscardOldestPolicy可以看到直接将队列中最老的任务删除,然后将本任务加入到线程池中
2025-11-19T12:12:25.png
自己实现拒绝策略也可以,直接仿照源码写,实现RejectedExecutionHandler中的代码即可,so easy

ps:最近有点忙,博客没时间发,但是每天还是有记录的哈,等有时间在整理一下发出来哈哈
2025-11-19T12:14:15.png