例如;在 JDK 的线程池配置参数里面,就有一个拒绝策略的参数。这个拒绝策略是线程池最后保险机制,一旦线程池处理请求达到饱和就会触发拒绝策略,而线程池默认的拒绝策略就是丢弃策略(AbortPolicy),除此之外还有另外三种策略,如下图:
这四种拒绝策略实现 RejectedExecutionHandler 接口,该接口定义了一个 rejectedExecution 方法,所有具体拒绝策略就在该方法实现具体的逻辑。如下:
在线程池的参数中,就是使用 RejectedExecutionHandler 作为参数类型:
结合里氏替换原则和多态特性,线程池可以传入所有 RejectedExecutionHandler 的子类,并表现出不同的拒绝行为。
模式分析:
1、根据不同场景和情况,制定不同的策略来处理。在代码层面体现就是:一个类对应一个策略,结合里氏替换和多态,就可以避免用 if-else 来集中处理各种情况。