AsyncConfigurer 线程池
转载自:https://blog.csdn.net/qq_30281443/article/details/83340909
线程是开发中常用到的,但是如果没有定义线程池,程序不断的创建,销毁线程,需要消耗很多时间,所以我们定义线程池可以减小这部分时间,我来实现AsyncConfigurer来配置线程池,先看看这个接口有什么方法
public interface AsyncConfigurer { Executor getAsyncExecutor(); AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler(); }
Executor : 处理异步方法调用时要使用的实例,
AsyncUncaughtExceptionHandler :在使用void返回类型的异步方法执行期间抛出异常时要使用的实例。
实现接口代码如下:
@Configuration @EnableAsync @EnableScheduling public class AsyncConfiguration implements AsyncConfigurer { private final Logger log = LoggerFactory.getLogger(AsyncConfiguration.class); @Override @Bean(name = "taskExecutor") public Executor getAsyncExecutor() { log.debug("Creating Async Task Executor"); ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); executor.setCorePoolSize(10); //核心线程数 executor.setMaxPoolSize(20); //最大线程数 executor.setQueueCapacity(1000); //队列大小 executor.setKeepAliveSeconds(300); //线程最大空闲时间 executor.setThreadNamePrefix("ics-Executor-"); ////指定用于新创建的线程名称的前缀。 executor.setRejectedExecutionHandler( new ThreadPoolExecutor.CallerRunsPolicy()); // 拒绝策略 return new ExceptionHandlingAsyncTaskExecutor(executor); } @Override public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() { return new SimpleAsyncUncaughtExceptionHandler(); } }
其中我们主要注意的就是拒绝策略方法:setRejectedExecutionHandler(),拒绝策略常用有有这四种
ThreadPoolExecutor.AbortPolicy 丢弃任务并抛出RejectedExecutionException异常(默认)。
ThreadPoolExecutor.DiscardPolic 丢弃任务,但是不抛出异常。
ThreadPoolExecutor.DiscardOldestPolicy 丢弃队列最前面的任务,然后重新尝试执行任务
ThreadPoolExecutor.CallerRunsPolic 由调用线程处理该任务
还有一篇博文写的很好,https://www.cnblogs.com/memoryXudy/p/7737190.html