于梦想齐行
于梦想齐行

@EnableAsync & @Async

@EnableAsync & @Async

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名称

# # #
首页      计算机      Java      Spring      @EnableAsync & @Async

于梦想齐行

@EnableAsync & @Async
1.作用 在spring容器中实现方法的异步调用。 2.用法 2个步骤: 1.将@EnableAsync(启用异步调用)标注到spring的配置类中。 2.将@Async标注到bean的方法或者类上,调用bea…
扫描二维码继续阅读
2022-03-08
近期文章
近期评论