正确使用@Async,避免踩坑

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了正确使用@Async,避免踩坑相关的知识,希望对你有一定的参考价值。

参考技术A

功能描述

@Async是Spring提供的使方法异步的注解

使用方法

代码示例

已实现的TaskExecutor线程池


@Async依赖线程池,当我们未指定线程池@Async会如何选择呢?

1. 当系统未配置任何线程池时

SpringBoot会默认添加一个coreSize=8的 ThreadPoolTaskExecutor 无界线程池,名称applicationTaskExecutor。

2. 当只配置了一个TaskExecutor线程池时

使用此线程池

3. 当只配置了一个线程池,但不是TaskExecutor线程池时

使用 SimpleAsyncTaskExecutor 线和池

4. 当有多个TaskExecutor线程池时

默认使用 SimpleAsyncTaskExecutor 线程池,如果指定就使用指定的线程池(即使不是TaskExecutor类型的线程池也可以)

注意: SimpleAsyncTaskExecutor 不是真的线程池,这个类不重用线程,每次调用都会创建一个新的线程。强烈建议开发时指定线程池的名称,避免创建多个TaskExecutor实例后,使用 SimpleAsyncTaskExecutor 线和池的情况发生

以上是关于正确使用@Async,避免踩坑的主要内容,如果未能解决你的问题,请参考以下文章

kotlin协程async await的异常踩坑以及异常处理的正确姿势

kotlin协程async await的异常踩坑以及异常处理的正确姿势

kotlin协程async await的异常踩坑以及异常处理的正确姿势

c# blazor 避免在委托类型返回 'void' 时使用 'async' lambda

C语言如何使用断言避免踩坑

C语言如何使用断言避免踩坑