SpringBoot配置异步任务(@Async)线程池
2021/12/16 23:47:36
本文主要是介绍SpringBoot配置异步任务(@Async)线程池,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
1. 使用ThreadFactoryBuilder设置线程名需要引入依赖
<dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>31.0.1-jre</version> </dependency>
2. 编写配置类
@Configuration @EnableAsync public class AsyncConfig implements AsyncConfigurer { /** * 自定义线程池 * corePoolSize: 核心线程 32 个 * maximumPoolSize: 最大线程数 64 个 * keepAliveTime: 保持活性时间 30 * unit: 时间单位 * workQueue: 队列 * nameThreadFactory: 设置线程名 * handler: 拒绝策略 * * 执行流程: * 1.当提交了一个任务,查看当前是否达到核心线程数,没有达到,创建线程执行 * 2.达到了核心线程数,查看队列是否已满,未满,放入队列 * 3.满了,查看是否达到最大线程数,未达到,创建线程执行任务 * 4.已达到最大线程数,执行拒绝 * * 拒绝策略: * 1.AbortPolicy: 默认策略,直接抛出异常 * 2.CallRunsPolicy: 用调用者所在线程执行任务 * 3.DisCardOldestPolicy: 丢弃阻塞队列的头部任务,执行当前任务 * 4.DsicardPolicy: 直接丢弃任务 */ @Override public Executor getAsyncExecutor() { // 设置线程名 ThreadFactory nameThreadFactory = new ThreadFactoryBuilder().setNameFormat("async-pool-%d").build(); return new ThreadPoolExecutor(32, 64, 30, TimeUnit.SECONDS, new LinkedBlockingQueue<>(128), nameThreadFactory, new ThreadPoolExecutor.CallerRunsPolicy()); } }
3. 测试
@Service public class AsyncService { @Async public void testAsync() { System.out.println(Thread.currentThread().getName() + " 正在执行任务..."); try { Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } } } @RestController public class AsyncController { @Autowired private AsyncService asyncService; @GetMapping("/async/test") public void asyncTest() { asyncService.testAsync(); } }
4. 打印结果如下
这篇关于SpringBoot配置异步任务(@Async)线程池的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-01Java部署教程:新手入门指南
- 2024-11-01Java部署教程:从入门到实践
- 2024-11-01Java订单系统教程:新手入门指南
- 2024-11-01Java分布式教程:新手入门指南
- 2024-11-01Java管理系统教程:新手入门详解
- 2024-11-01Java监控系统教程:从入门到实践
- 2024-11-01SpringCloud Alibaba入门:轻松搭建微服务架构
- 2024-11-01Swagger入门:新手必读指南
- 2024-11-01Swagger入门:轻松搭建API文档
- 2024-11-01uni-APP入门:新手快速上手指南