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

原文地址:https://www.cnblogs.com/inspirationBoom/p/10552401.html