参考答案
当线程池的任务缓存队列已满,且线程池中的线程数目达到maximumPoolSize时,如果还有任务到来就会采取任务拒绝策略。
线程池的拒绝策略通常有以下四种:
1. AbortPolicy
- 丢弃任务并抛出RejectedExecutionException异常。这是线程池默认的拒绝策略,在任务不能再提交的时候,抛出异常,及时反馈程序运行状态。
- 如果是比较关键的业务,推荐使用此拒绝策略,在系统不能承载更大的并发量时,能及时的通过异常发现。
2. DiscardPolicy
- 丢弃任务,但是不抛出异常。 如果线程队列已满,则后续提交的任务都会被丢弃,且是静默丢弃。
3. DiscardOldestPolicy
- 丢弃队列最前面的任务,然后重新提交被拒绝的任务。
4. CallerRunsPolicy
- 由调用线程(提交任务的线程)处理该任务。
- 除此之外,用户还可以自定义拒绝策略,例如:实现RejectExecutionHandler接口、实现rejectedExecution方法、自定义策略模式等。具体使用哪种策略,还得根据实际业务场景才能做出抉择。
- 合理配置线程池参数,例如,核心线程数、最大线程数、任务队列长度等,保证线程池能够及时有效处理任务,这样才能够不丢弃任务。
以上,是Java面试题【线程池的拒绝策略有哪几种】的参考答案。
输出,是最好的学习方法。
欢迎在评论区留下你的问题、笔记或知识点补充~
—end—