简介

Spring中用@Async注解标记的方法,称为异步方法,它会在调用方的当前线程之外的独立的线程中执行

@Async注解使用条件:
1. @Async注解一般用在类的方法上,如果用在类上,那么这个类所有的方法都是异步执行的;
2. 所使用的@Async注解方法的类对象应该是Spring容器管理的bean对象;
3. 调用异步方法类上需要配置上注解@EnableAsync
注意事项:
1. 默认情况下(即@EnableAsync注解的mode=AdviceMode.PROXY),同一个类内部没有使用@Async注解修饰的方法或调用@Async注解修饰的方法,是不会异步执行的,这点跟 @Transitional 注解类似,底层都是通过动态代理实现的。如果想实现类内部自调用也可以异步,则需要切换@EnableAsync注解的mode=AdviceMode.ASPECTJ
2. 任意参数类型都是支持的,但是方法返回值必须是void或者Future类型。当使用Future时,你可以使用 实现了Future接口的ListenableFuture接口或者CompletableFuture类与异步任务做更好的交互。如果异步方法有返回值,没有使用Future类型的话,调用方获取不到返回值。

配置

spring.task.execution.pool.core-size=2
spring.task.execution.pool.max-size=5
spring.task.execution.pool.queue-capacity=10
spring.task.execution.pool.keep-alive=60s
spring.task.execution.pool.allow-core-thread-timeout=true
spring.task.execution.thread-name-prefix=task-

含义:
spring.task.execution.pool.core-size:线程池创建时的初始化线程数,默认为8
spring.task.execution.pool.max-size:线程池的最大线程数,默认为int最大值
spring.task.execution.pool.queue-capacity:用来缓冲执行任务的队列,默认为int最大值
spring.task.execution.pool.keep-alive:线程终止前允许保持空闲的时间
spring.task.execution.pool.allow-core-thread-timeout:是否允许核心线程超时
spring.task.execution.shutdown.await-termination:是否等待剩余任务完成后才关闭应用
spring.task.execution.shutdown.await-termination-period:等待剩余任务完成的最大时间
spring.task.execution.thread-name-prefix:线程名的前缀,设置好了之后可以方便我们在日志中查看处理任务所在的线程池