SpringBoot:@Async如何自定义线程池以及使用教程

发布时间:2024年01月22日

🍁 作者:知识浅谈,CSDN签约讲师,CSDN博客专家,华为云云享专家,阿里云专家博主
📌 擅长领域:全栈工程师、爬虫、ACM算法
💒 公众号:知识浅谈
🔥网站:vip.zsqt.cc

看别的教程一大堆废话,直接上干货不行吗,直接看下边例子

🎈配置异步线程池

@EnableAsync
@Configuration
public class AsyncConfiguration {
    //定义线程池
    @Bean("threadPool1") // bean的名称,线程池的bean的名字,不是创建线程的名字
    public Executor ThreadPool1(){
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        executor.setCorePoolSize(10); /** 核心线程数(默认线程数) */
        executor.setMaxPoolSize(20);/** 最大线程数 */
        executor.setQueueCapacity(500);/** 缓冲队列大小 */
        executor.setKeepAliveSeconds(60);/** 允许线程空闲时间(单位:默认为秒) */
        executor.setWaitForTasksToCompleteOnShutdown(true); 
        executor.setThreadNamePrefix("task-thread-"); /** 线程池名前缀 */
        executor.setRejectedExecutionHandler(new ThreadPoolExecutor.DiscardPolicy()); //拒绝策略:缓存队列满了之后由调用线程处理,一般是主线程
        executor.initialize();
        return executor;
    }

}

🎈异步方法

@RestController("/test")
public class Test2Controller {
    @Async("threadPool1")
    public void test1() throws InterruptedException {
        Thread.sleep(5000);
        System.out.println("test1");
    }
}

🎈调用异步方法

@Api("测试")
@RestController
@RequestMapping("/test/user")
public class TestController extends BaseController
{
    @Autowired
    private Test2Controller test2Controller;
    @ApiOperation("异步")
    @GetMapping("/testAsync")
    public String testAsync() throws InterruptedException {
        test2Controller.test1();
        return "async";
    }
}

结果:
结果直接返回:test1 5秒后打印出来。
在这里插入图片描述

🍚总结

大功告成,撒花致谢🎆🎇🌟,关注我不迷路,带你起飞带你富。
Writted By 知识浅谈

文章来源:https://blog.csdn.net/qq_37699336/article/details/135747329
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。