今天我自己整理了一下ThreadPoolExector的最后一个参数--拒绝策略
当新到的任务数量已经超过了系统实际能够承载的能力时,就会触发拒绝策略,这是系统超负荷运行的补救措施具体以下3个方面
- 线程池中的线程已经用完了,无法为新任务服务
- 等待队列已经满了,也不能容纳新的任务
- 线程池关闭的时候,也需要对任务加入队列的操作进行额外的协调处理
具体措施
JDK提供了四种拒绝策略
- AbortPolicy策略:直接抛出异常
- CallerRunsPolicy策略:只用调用者所在线程运行任务
- DiscardOldestPolicy策略:丢弃队列中即将执行的任务,并执行当前任务
- DiscardPolicy策略:不处理直接丢弃
02自定义扩展
以上四种策略均实现了RejectExecutionHandler接口,所以我们自己可以拓展实现该接口