当线程池中的线程数目达到maximumPoolSize,且任务缓存队列已满时,如果还有任务到来就会采取任务拒绝策略,通常有以下四种策略:
ThreadPoolExecutor.AbortPolicy:丢弃任务并抛出RejectedExecutionException异常。
ThreadPoolExecutor.DiscardPolicy:也是丢弃任务,但是不抛出异常。
ThreadPoolExecutor.DiscardOldestPolicy:丢弃队列最前面的任务,然后重新尝试执行任务(重复此过程)
ThreadPoolExecutor.CallerRunsPolicy:由调用线程处理该任务
我们可以通过重写RejectedExecutionHandler来自定义一种拒绝或降级策略:
package com.example.demo.test.thread;
import com.alibaba.fastjson.JSON;
import com.example.demo.test.reflect.Student;
import com.google.common.util.concurrent.ThreadFactoryBuilder;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import javax.annotation.PostConstruct;
import java.lang.reflect.Field;
import java.util.concurrent.*;
@Slf4j
pu