线程池的拒绝策略
若线程池中的核心线程数被用完且阻塞队列己排满,则此时线程池的线程资源已耗
尽,线程池将没有足够的线程资源执行新的任务。为了保证操作系统的安全,线程池将
通过拒绝策略处理新添加的线程任务。
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 的拒绝策略为: 丢弃当前的线程任务而不做任何处理。如果系统允许
在资源不足的情况下丢弃部分任务, 则这将是保障系统安全、稳定的一种很好的方案。
from 蜡笔没了芯