JAVA 中Spring的@Async用法总结
JAVA 中Spring的@Async用法总结 在 Java 应用中,绝大多数情况下都是通过同步的方式来实现交互处理的,但是在处理与第三方系统交互的时候,容易造成响应迟缓的情况。之前大部分都是使用多线程来完成此类任务,但是在 Spring 3.x 之后,就已经内置了 @Async 来完美解决这个问题。 异步调用 异步调用是指在发送调用指令后,不等待被调用方法完全执行完毕,而是继续执行下面的流程。例如,在某个调用中,需要顺序调用 A, B, C 三个过程方法;如他们都是同步调用,则需要将他们都顺序执行完毕之后,方算作过程执行完毕;如 B 为一个异步的调用方法,则在执行完 A 之后,调用 B,并不等待 B 完成,而是执行开始调用 C,待 C 执行完毕之后,就意味着这个过程执行完毕了。 常规的异步调用处理方式 在 Java 中,一般在处理类似的场景之时,都是基于创建独立的线程去完成相应的异步调用逻辑,通过主线程和不同的线程之间的执行流程,从而在启动独立的线程之后,主线程继续执行而不会产生停滞等待的情况。 @Async 介绍 在 Spring 中,基于 @Async 标注的方法,称之为异步方法;这些方法将在执行的时候,将会在独立的线程中被执行,调用者无需等待它的完成,即可继续其他的操作。要在 Spring 中启用 @Async,可以通过基于 Java 配置的方式或基于 XML 配置文件的方式来实现。 基于 @Async 无返回值调用 使用 @Async 可以实现无返回值的异步调用,例如: ```java @Async public void asyncMethodWithVoidReturnType() { System.out.println("Execute method asynchronously. " + Thread.currentThread().getName()); } ``` 这种方式非常简单,一个标注即可解决所有的问题。 基于 @Async 返回值的调用 使用 @Async 也可以实现返回值的异步调用,例如: ```java @Async public Future<String> asyncMethodWithReturnType() { System.out.println("Execute method asynchronously - " + Thread.currentThread().getName()); try { Thread.sleep(5000); return new AsyncResult<String>("hello world !!!!!"); } catch (InterruptedException e) { // } return null; } ``` 这种方式可以返回一个 Future 对象,其中包含了异步执行的结果。需要注意的是,返回的数据类型为 Future 类型,其为一个接口。具体的结果类型为 AsyncResult,這個是需要注意的地方。 调用返回结果的异步方法 可以使用循环判断来等待获取异步方法的结果信息,例如: ```java public void testAsyncAnnotationForMethodsWithReturnType() throws InterruptedException, ExecutionException { System.out.println("Invoking an asynchronous method. " + Thread.currentThread().getName()); Future<String> future = asyncAnnotationExample.asyncMethodWithReturnType(); while (true) { if (future.isDone()) { // 判断是否执行完毕 System.out.println("Result: " + future.get()); break; } } } ``` 以上就是 Spring 中 @Async 的用法总结,通过使用 @Async 可以轻松地实现异步调用,提高系统的响应速度和性能。
- 粉丝: 5
- 资源: 973
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- (源码)基于Spring Boot框架的博客管理系统.zip
- (源码)基于ESP8266和Blynk的IR设备控制系统.zip
- (源码)基于Java和JSP的校园论坛系统.zip
- (源码)基于ROS Kinetic框架的AGV激光雷达导航与SLAM系统.zip
- (源码)基于PythonDjango框架的资产管理系统.zip
- (源码)基于计算机系统原理与Arduino技术的学习平台.zip
- (源码)基于SSM框架的大学消息通知系统服务端.zip
- (源码)基于Java Servlet的学生信息管理系统.zip
- (源码)基于Qt和AVR的FestosMechatronics系统终端.zip
- (源码)基于Java的DVD管理系统.zip