spring boot 学习(十一)使用@Async实现异步调用
使用@Async实现异步调用
什么是”异步调用”与”同步调用”
“同步调用”就是程序按照一定的顺序依次执行,,每一行程序代码必须等上一行代码执行完毕才能执行;”异步调用”则是只要上一行代码执行,无需等待结果的返回就开始执行本身任务。
通常情况下,”同步调用”执行程序所花费的时间比较多,执行效率比较差。所以,在代码本身不存在依赖关系的话,我们可以考虑通过”异步调用”的方式来并发执行。
“异步调用”
在 spring boot 框架中,只要提过@Async
注解就能奖普通的同步任务改为异步调用任务。
注意: @Async所修饰的函数不要定义为static类型,这样异步调用不会生效
1. 开启@Async注解
在Spring Boot主类添加@EnableAsync
注解
2. 定义异步任务
定义Task类,创建三个处理函数分别模拟三个执行任务的操作,操作消耗时间随机取(10秒内)。
@Component
public class Task {//定义一个随机对象.public static Random random =new Random();@Async //加入"异步调用"注解public void doTaskOne() throws InterruptedException {System.out.println("开始执行任务一");long start = System.currentTimeMillis();Thread.sleep(random.nextInt(10000));long end = System.currentTimeMillis();System.out.println("完成任务一,耗时:" + (end - start) + "毫秒");}@Asyncpublic void doTaskTwo() throws InterruptedException {System.out.println("开始执行任务二");long start = System.currentTimeMillis();Thread.sleep(random.nextInt(10000));long end = System.currentTimeMillis();System.out.println("完成任务二,耗时:" + (end - start) + "毫秒");}@Asyncpublic void doTaaskThree() throws InterruptedException {System.out.println("开始执行任务三");long start = System.currentTimeMillis();Thread.sleep(random.nextInt(10000));long end = System.currentTimeMillis();System.out.println("完成任务三,耗时:" + (end - start) + "毫秒");}
}
3. 创建Controller进行测试
注意@Autowired
注入类,因为这个类已经被 Spring 管理了。如果使用 new 来获得线程类将不会执行异步效果,这里涉及到在 Spring 中使用多线程。
@Controller
public class TaskController {@Autowiredprivate Task TASK;@ResponseBody@RequestMapping("/task")public String task() throws Exception {System.out.println("开始执行Controller任务");long start = System.currentTimeMillis();TASK.doTaskOne();TASK.doTaskTwo();TASK.doTaaskThree();long end = System.currentTimeMillis();System.out.println("完成Controller任务,耗时:" + (end - start) + "毫秒");return "success";}
}
4. 多次调用
访问 http://localhost:8080/task 截图:
转载于:https://www.cnblogs.com/MaxElephant/p/8108542.html
spring boot 学习(十一)使用@Async实现异步调用相关推荐
- spring boot 1.5.4 定时任务和异步调用(十)
1 Spring Boot定时任务和异步调用 我们在编写Spring Boot应用中经常会遇到这样的场景,比如:我需要定时地发送一些短信.邮件之类的操作,也可能会定时地检查和监控一些标志.参 ...
- Spring Boot笔记-jQuery使用load进行异步调用
举个例子 初始化界面如下: 填充修改值并且点击修改! 前端中相关的代码: <script type="text/javascript">function change( ...
- Spring Boot使用@Async实现异步调用:自定义线程池
在之前的Spring Boot基础教程系列中,已经通过<Spring Boot中使用@Async实现异步调用>一文介绍过如何使用 @Async注解来实现异步调用了.但是,对于这些异步执行的 ...
- Spring Boot使用@Async实现异步调用:ThreadPoolTaskScheduler线程池的优雅关闭
上周发了一篇关于Spring Boot中使用@Async来实现异步任务和线程池控制的文章:<Spring Boot使用@Async实现异步调用:自定义线程池>.由于最近身边也发现了不少异步 ...
- springboot 异步mysql_spring boot 使用@Async实现异步调用方法
使用@Async实现异步调用 什么是"异步调用"与"同步调用" "同步调用"就是程序按照一定的顺序依次执行,,每一行程序代码必须等上一行代码 ...
- Spring Boot学习笔记-进阶(3)
文章目录 Spring Boot学习笔记-进阶(3) 一.Spring Boot与缓存 二.Spring Boot与消息 三.Spring Boot与检索 四.Spring Boot与任务 异步任务 ...
- Spring Boot学习笔记-基础(2)
Spring Boot学习笔记-基础(2) Spring Boot 优点: – 快速创建独立运行的Spring项目以及与主流框架集成 – 使用嵌入式的Servlet容器,应用无需打成WAR包 – st ...
- Spring Boot学习笔记-实践建言
2019独角兽企业重金招聘Python工程师标准>>> 本文延续<Spring Boot学习笔记-快速示例>,从开发指南中摘出一些实践经验可供参考.这也是笔者看到的眼前一 ...
- 八个开源的 Spring Boot 学习资源,你值得拥有
点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:什么?你还在使用fastjson,性能太差了个人原创+1博客:点击前往,查看更多 转载自:牧马小子 Spring ...
最新文章
- [深入理解文件系统之十二] ext3文件系统的挂载选项和journal
- 2017 OWASP十大安全趋势榜单变化解析
- 全面解析Inception Score原理及其局限性
- mysql 删除外键
- IT运维服务管理问题总结 #F#
- SDN Overlay网络中虚机到物理机的数据包的转发
- 「镁客·请讲」亮亮视野吴斐:行业应用体现AR硬件的价值本质
- 工业控制系统(ICS)
- Centos7上搭建迅雷远程下载服务器
- 鸡啄米:C++编程入门系列之六(算法的基本控制结构之选择结构)
- 情人辞职信 [搞笑,也来个好玩的乐一乐]
- Python搭建代理池爬取拉勾网招聘信息
- 2009年网络游戏排行榜
- 一分钟弄懂什么是分布式和微服务
- 高新技术企业认定中涉及的领域有哪些?
- 宝峰对讲机16频率表_宝峰uv5r系列对讲机出厂预置频率表-手工编辑版
- 对软件公司不要传智播客学生的驳斥
- 读书笔记:多智能体机器学习(二)
- 10、面试官对于分布式搜索引擎的4个连环炮
- ZTE C300 和 M5680T 上下行带宽限速配置(ACL|QoS|Gem-traffic)
热门文章
- java6 3_那些年,一起学的Java 6-3
- 3dm游戏运行包_动作游戏ACT 逃离丧尸镇 Shadows of Kurgansk 电脑游戏资源
- 服务器cpu哪个型号超频,服务器CPU也超频,AMD霄龙性能暴涨1.5倍-控制器/处理器-与非网...
- 空间中的语义直线检测_基于语义分割的车道线检测算法研究
- java做登录时要加锁吗_你用对锁了吗?谈谈 Java “锁” 事
- 20190806:字符串解密
- html%3c arial%3e,【博客园】样式美化+网站统计访问+添加网易云背景音乐
- java 过滤字符串_java实现压缩字符串和java字符串过滤
- 把python37添加到环境变量配置_linux设置python环境变量 分类: python ...
- s8050三极管经典电路_电子电路-闪瞎你的眼!爆闪警示灯超简单原理介绍!