什么是“异步调用”?

“异步调用”对应的是“同步调用”,同步调用指程序按照定义顺序依次执行,每一行程序都必须等待上一行程序执行完成之后才能执行;异步调用指程序在顺序执行时,不等待异步调用的语句返回结果就执行后面的程序。
同步调用
下面通过一个简单示例来直观的理解什么是同步调用:
定义Task类,创建三个处理函数分别模拟三个执行任务的操作,操作消耗时间随机取(10秒内)
package com.kfit.task;
import java.util.Random;
import org.springframework.stereotype.Component;
/**
* 定义3个任务
* @author Angel(QQ:412887952)
* @version v.0.1
*/
@Component
publicclass Task1 {
//定义一个随机对象.
publicstatic Random random =new Random();
//任务一;
publicvoid doTaskOne() throws Exception {
System.out.println("开始做任务一");
longstart = System.currentTimeMillis();
Thread.sleep(random.nextInt(10000));
longend = System.currentTimeMillis();
System.out.println("完成任务一,耗时:" + (end - start) + "毫秒");
}
//任务二;
publicvoid doTaskTwo() throws Exception {
System.out.println("开始做任务二");
longstart = System.currentTimeMillis();
Thread.sleep(random.nextInt(10000));
longend = System.currentTimeMillis();
System.out.println("完成任务二,耗时:" + (end - start) + "毫秒");
}
//任务3;
publicvoid doTaskThree() throws Exception {
System.out.println("开始做任务三");
longstart = System.currentTimeMillis();
Thread.sleep(random.nextInt(10000));
longend = System.currentTimeMillis();
System.out.println("完成任务三,耗时:" + (end - start) + "毫秒");
}
}
编写一个访问方法:
//测试task1.
@RequestMapping("/task1")
public String task1() throws Exception{
task1.doTaskOne();
task1.doTaskTwo();
task1.doTaskThree();
return"task1";
}
运行可以看到类似如下输出:
开始做任务一
完成任务一,耗时:4156毫秒
开始做任务二
完成任务二,耗时:557毫秒
开始做任务三
完成任务三,耗时:6171毫秒
异步调用
上述的同步调用虽然顺利的执行完了三个任务,但是可以看到执行时间比较长,若这三个任务本身之间不存在依赖关系,可以并发执行的话,同步调用在执行效率方面就比较差,可以考虑通过异步调用的方式来并发执行。
在Spring Boot中,我们只需要通过使用@Async注解就能简单的将原来的同步函数变为异步函数,Task类改在为如下模式:
package com.kfit.task;
import java.util.Random;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
/**
* 定义3个任务
* @author Angel(QQ:412887952)
* @version v.0.1
*/
@Component
publicclass Task2 {
//定义一个随机对象.
publicstatic Random random =new Random();
//任务一;
@Async
publicvoid doTaskOne() throws Exception {
System.out.println("开始做任务一");
longstart = System.currentTimeMillis();
Thread.sleep(random.nextInt(10000));
longend = System.currentTimeMillis();
System.out.println("完成任务一,耗时:" + (end - start) + "毫秒");
}
//任务二;
@Async
publicvoid doTaskTwo() throws Exception {
System.out.println("开始做任务二");
longstart = System.currentTimeMillis();
Thread.sleep(random.nextInt(10000));
longend = System.currentTimeMillis();
System.out.println("完成任务二,耗时:" + (end - start) + "毫秒");
}
//任务3;
@Async
publicvoid doTaskThree() throws Exception {
System.out.println("开始做任务三");
longstart = System.currentTimeMillis();
Thread.sleep(random.nextInt(10000));
longend = System.currentTimeMillis();
System.out.println("完成任务三,耗时:" + (end - start) + "毫秒");
}
}
为了让@Async注解能够生效,还需要在Spring Boot的主程序中配置@EnableAsync,如下所示:
@SpringBootApplication
@EnableAsync
publicclass App {
//省略其它代码…
}
编写测试方法:
//测试task2.
@RequestMapping("/task2")
public String task2() throws Exception{
task2.doTaskOne();
task2.doTaskTwo();
task2.doTaskThree();
return"task2";
}
此时可以反复执行单元测试,您可能会遇到各种不同的结果,比如:
开始做任务一
开始做任务二
开始做任务三
完成任务三,耗时:57毫秒
完成任务二,耗时:3621毫秒
完成任务一,耗时:7419毫秒
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# spring
# boot
# 异步调用
# async
# async异步执行
# spring boot使用自定义配置的线程池执行Async异步任务
# spring boot异步(Async)任务调度实现方法
# SpringBoot实现定时任务和异步调用
# SpringBoot用@Async注解实现异步任务
# Springboot任务之异步任务的使用详解
# 详细讲解springboot如何实现异步任务
# SpringBoot详细讲解异步任务如何获取HttpServletRequest
# Spring Boot小型项目如何使用异步任务管理器实现不同业务间的解耦
# 完成任务
# 可以看到
# 的是
# 就能
# 主程序
# 执行时间
# 要在
# 不存在
# 只需要
# 所示
# 用在
# 这三个
# 较长
# 还需
# 就比
# 大家多多
# 单元测试
# 都必须
# author
# Component
相关文章:
如何在万网自助建站平台快速创建网站?
宝塔面板创建网站无法访问?如何快速排查修复?
建站org新手必看:2024最新搭建流程与模板选择技巧
建站之星如何一键生成手机站?
网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?
建站主机SSH密钥生成步骤及常见问题解答?
制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站?
如何通过商城自助建站源码实现零基础高效建站?
c++23 std::expected怎么用 c++优雅处理函数错误返回【详解】
制作网站公司那家好,网络公司是做什么的?
mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?
建站之星北京办公室:智能建站系统与小程序生成方案解析
广州美橙建站如何快速搭建多端合一网站?
香港服务器建站指南:免备案优势与SEO优化技巧全解析
建站之星如何取消后台验证码生成?
如何自定义建站之星网站的导航菜单样式?
如何正确下载安装西数主机建站助手?
公司网站制作价格怎么算,公司办个官网需要多少钱?
制作充值网站的软件,做人力招聘为什么要自己交端口钱?
建站VPS配置与SEO优化指南:关键词排名提升策略
如何登录建站主机?访问步骤全解析
天河区网站制作公司,广州天河区如何办理身份证?需要什么资料有预约的网站吗?
建站之星CMS建站配置指南:模板选择与SEO优化技巧
建站VPS选购需注意哪些关键参数?
如何在阿里云香港服务器快速搭建网站?
建站主机与虚拟主机有何区别?如何选择最优方案?
网站制作与设计教程,如何制作一个企业网站,建设网站的基本步骤有哪些?
如何在建站宝盒中设置产品搜索功能?
如何在Golang中引入测试模块_Golang测试包导入与使用实践
如何在宝塔面板创建新站点?
小自动建站系统:AI智能生成+拖拽模板,多端适配一键搭建
湖南网站制作公司,湖南上善若水科技有限公司做什么的?
广德云建站网站建设方案与建站流程优化指南
建站之星如何快速解决建站难题?
建站之星如何配置系统实现高效建站?
新网站制作渠道有哪些,跪求一个无线渠道比较强的小说网站,我要发表小说?
如何通过服务器快速搭建网站?完整步骤解析
制作网站的软件免费下载,免费制作app哪个平台好?
网站好制作吗知乎,网站开发好学吗?有什么技巧?
如何用美橙互联一键搭建多站合一网站?
详解jQuery停止动画——stop()方法的使用
微信小程序制作网站有哪些,微信小程序需要做网站吗?
免费制作小说封面的网站有哪些,怎么接网站批量的封面单?
江苏网站制作公司有哪些,江苏书法考级官方网站?
SAX解析器是什么,它与DOM在处理大型XML文件时有何不同?
如何在万网自助建站中设置域名及备案?
建站中国官网:模板定制+SEO优化+建站流程一站式指南
如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?
如何打造高效商业网站?建站目的决定转化率
已有域名和空间如何快速搭建网站?
*请认真填写需求信息,我们会在24小时内与您取得联系。