线程池的拒绝策略

若线程池中的核心线程数被用完且阻塞队列己排满,则此时线程池的线程资源已耗
尽,线程池将没有足够的线程资源执行新的任务。为了保证操作系统的安全,线程池将
通过拒绝策略处理新添加的线程任务。

JDK 内置的拒绝策略有A b ortPo li cy 、
Ca ll erRunsPo li cy 、DiscardO l destPolicy 、D i scardPolicy 这4 种,默认的拒绝策略在

Threa d Poo!Exec u tor 中作为内部类提供。

在默认的拒绝策略不能满足应用的需求时,可以
自定义拒绝策略。

 

1. AbortPolicy
AbortPol icy 直接抛出异常,阻止线程正常运行

2 CallerRunsPolicy

CallerRunsPolicy 的拒绝策略为: 如果被丢弃的线程任务未关闭,则执行该线程任务。
注意, C allerRunsPolicy 拒绝策略不会真的丢弃任务

 

3 Discard 0ldestPoIi cy

Discard 0ldestPoIi cy 的拒绝策略为:移除线程队列中最早的←个线程任务,并尝试提
交当前任务

4 Discard Policy

DiscardPolic y 的拒绝策略为: 丢弃当前的线程任务而不做任何处理。如果系统允许
在资源不足的情况下丢弃部分任务, 则这将是保障系统安全、稳定的一种很好的方案。

posted @ 2022-08-16 14:56  蜡笔没了芯  阅读(67)  评论(0编辑  收藏  举报