Spring异步注解@Async的使用及其自定义线程池配置总结
import org.springframework.scheduling.annotation.AsyncConfigurer;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.stereotype.Component;
import java.util.concurrent.Executor;
import java.util.concurrent.ThreadPoolExecutor;
@Component
public class AsyncConfig implements AsyncConfigurer {
@Override
public Executor getAsyncExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(5); // 核心线程数
executor.setMaxPoolSize(10); // 最大线程数
executor.setQueueCapacity(25); // 队列大小
executor.setKeepAliveSeconds(20); // 线程空闲时的存活时间
executor.setThreadNamePrefix("MyAsyncThread-"); // 线程名前缀
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); // 拒绝策略
executor.initialize(); // 初始化线程池
return executor;
}
}
这段代码定义了一个AsyncConfig
类,实现了AsyncConfigurer
接口,并覆盖了getAsyncExecutor
方法。在这个方法中,我们创建了一个ThreadPoolTaskExecutor
实例,并设置了线程池的核心线程数、最大线程数、队列大小、存活时间以及线程名前缀。我们也设置了拒绝策略,当任务太多无法处理时,调用者运行该任务。最后通过executor.initialize()
初始化线程池。这样,我们就可以使用@Async
注解来异步执行方法,并且可以自定义线程池的配置。
评论已关闭