spring @Async

讨论一下 spring  boot 下 使用 spring 异步执行的注解

先看下这个类:

 这个类是 spring boot auto configure 下完成 TaskExecutor的自动配置。

1. 需要在类路径存在 ThreadPoolTaskExecutor,这个类是 是spring context模块下的类,也就是 需要引入 spring context 依赖,这个基本都会引入

2. 标识为配置类

3. taskExecution的属性配置

如果不存在TaskExecutorBuilder类型的bean,这在这里注册默认的TaskExecutorBuilder。

默认的线程池:

1. 队列大小: 最大

2. 核心线程数: 8

3. 最大线程数:8

4. 

如果不存在 Executor类型的bean,这使用builder构建一个。

这个Executor 是 jdk中的线程池的顶级父类,也就是 如果 容器中存在这个线程池bean,就不构建了。

如果不想使用默认的,可以自己定义:

 ThreadPoolTaskExecutor 内部构建的就是 JDK提供的 ThreadPoolExecutor

此时,不论是 用默认的 还是 自定义的,线程容器中已经存在了 一个 线程池。

当 使用 @Async 注解类 描述一个方法时,发生了什么?

不出意外的话,这里应该是 使用的 AOP实现的。

@EnableAsync注解 使用 importSelector注册。

 

这里默认的 模式 是PROXY

注册一个 bean的名称为 org.springframework.context.annotation.internalAsyncAnnotationProcessor

类型为:AsyncAnnotationBeanPostProcessor

 

这里获取 @Async 指定的 处理器,如果没指定就用默认的。

 一般都是 直接提交任务。

到这里 基本OK。

注意两点:

1. @EnableAsync 开启异步能力

2. 适当自定义线程池

处理 使用 @Bean,这种方式也可以,不过 这个在调用的时候才创建

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值