1.作用
在spring容器中实现方法的异步调用。
2.用法
2个步骤:
1.将@EnableAsync(启用异步调用)标注到spring的配置类中。
2.将@Async标注到bean的方法或者类上,调用bean中的这个方法的时候,该方法会被异步执行。(标注在类上则指对该类的所有方法有效)
3.获取异步执行结果
若想获取@Async方法的执行结果,方法返回值必须是Future类型。
public Future<String> getFruitInfo(long fruitId) {
return AsyncResult.forValue(String.format("水果%d的信息!", fruitId));
}
4.自定义异步执行的线程池
@EnableAsync默认情况下使用内置的线程池来异步调用方法。
2种方式自定义异步线程池
a) 方式一
在spring容器中定义了一个线程池类型的bean,bean的名称必须是taskExecutor。
b) 方式二
定义一个bean,实现AsyncConfigurer接口中的getAsyncExecutor方法,返回自定义的线程池。
5.自定义异常处理
通过@Async异步执行方法且方法发生异常时,可以通过自定义异常处理来获取异常信息。
异常处理分2种情况
1.当返回值是Future类型的时候,方法内部有异常的时候,会向外抛出,可以对Future.get进行异常捕获。
2.当返回值不是Future类型的时候,可以自定义一个bean,实现AsyncConfigurer#getAsyncUncaughtExceptionHandler方法,返回自定义的异常处理。
6.线程隔离
使用步骤
1.在spring容器中,自定义多个线程池bean
2.@Async中指定要使用的线程池的bean名称