# @Async如何使用
# Spring配置启动异步调用
通过注解@EnableAsync让Spring支持异步调用。
# 如何自定义线程调用的线程池
如果不自定义线程池,则Spring会使用默认的线程池。
自定义线程池代码如下:
//在component中添加如下方法
@Bean
public AsyncTaskExecutor taskExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setThreadNamePrefix("Anno-Executor");
executor.setCorePoolSize(5);
executor.setMaxPoolSize(20);
executor.setQueueCapacity(100);
executor.setKeepAliveSeconds(30);
// 设置拒绝策略
executor.setRejectedExecutionHandler(new RejectedExecutionHandler() {
@Override
public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) {
// .....
}
});
//
// executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
return executor;
}
# @Async支持的方法签名
- 入参可自定义,可有可无。
- 返回参只能是void,或者是Future<?>
# 异步调用对于异常的处理
- 返回值是void,异常会被AsyncUncaughtExceptionHandler处理掉。
- 返回值是Future<?>,如下两种处理异常的方式
- 在异步逻辑中处理,通过Future<?>返回。
- 在future.get()处进行捕获。