diff --git a/docs/system-design/framework/spring/Async.md b/docs/system-design/framework/spring/Async.md index e3bfe7f9..8495ae71 100644 --- a/docs/system-design/framework/spring/Async.md +++ b/docs/system-design/framework/spring/Async.md @@ -17,9 +17,9 @@ ### 自定义线程池 -如果没有显式地配置线程池,Spring Boot 可能会使用默认的 `SimpleAsyncTaskExecutor` 实现。`SimpleAsyncTaskExecutor` 本质上不算是一个真正的线程池,因为它对于每个请求都会启动一个新线程而不重用现有线程,这会带来一些潜在的问题,例如资源消耗过大。 +如果没有显式地配置线程池,在 `@Async` 底层会先在 `BeanFactory` 中尝试获取线程池,如果获取不到,则会创建一个 `SimpleAsyncTaskExecutor` 实现。`SimpleAsyncTaskExecutor` 本质上不算是一个真正的线程池,因为它对于每个请求都会启动一个新线程而不重用现有线程,这会带来一些潜在的问题,例如资源消耗过大。 -为什么说是可能呢?因为,这只是没有显示配置线程池中的一种情况,还可能会存在一些其他情况,但都或多或少存在一些问题,这里就不细说了,具体可以参考这篇文章:[浅析 Spring 中 Async 注解底层异步线程池原理|得物技术](https://mp.weixin.qq.com/s/FySv5L0bCdrlb5MoSfQtAA)。 +具体线程池获取可以参考这篇文章:[浅析 Spring 中 Async 注解底层异步线程池原理|得物技术](https://mp.weixin.qq.com/s/FySv5L0bCdrlb5MoSfQtAA)。 一定要显式配置一个线程池,推荐`ThreadPoolTaskExecutor`。并且,还可以根据任务的性质和需求,为不同的异步方法指定不同的线程池。