使用@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实现异步调用相关推荐

  1. spring boot 1.5.4 定时任务和异步调用(十)

    1      Spring Boot定时任务和异步调用 我们在编写Spring Boot应用中经常会遇到这样的场景,比如:我需要定时地发送一些短信.邮件之类的操作,也可能会定时地检查和监控一些标志.参 ...

  2. Spring Boot笔记-jQuery使用load进行异步调用

    举个例子 初始化界面如下: 填充修改值并且点击修改! 前端中相关的代码: <script type="text/javascript">function change( ...

  3. Spring Boot使用@Async实现异步调用:自定义线程池

    在之前的Spring Boot基础教程系列中,已经通过<Spring Boot中使用@Async实现异步调用>一文介绍过如何使用 @Async注解来实现异步调用了.但是,对于这些异步执行的 ...

  4. Spring Boot使用@Async实现异步调用:ThreadPoolTaskScheduler线程池的优雅关闭

    上周发了一篇关于Spring Boot中使用@Async来实现异步任务和线程池控制的文章:<Spring Boot使用@Async实现异步调用:自定义线程池>.由于最近身边也发现了不少异步 ...

  5. springboot 异步mysql_spring boot 使用@Async实现异步调用方法

    使用@Async实现异步调用 什么是"异步调用"与"同步调用" "同步调用"就是程序按照一定的顺序依次执行,,每一行程序代码必须等上一行代码 ...

  6. Spring Boot学习笔记-进阶(3)

    文章目录 Spring Boot学习笔记-进阶(3) 一.Spring Boot与缓存 二.Spring Boot与消息 三.Spring Boot与检索 四.Spring Boot与任务 异步任务 ...

  7. Spring Boot学习笔记-基础(2)

    Spring Boot学习笔记-基础(2) Spring Boot 优点: – 快速创建独立运行的Spring项目以及与主流框架集成 – 使用嵌入式的Servlet容器,应用无需打成WAR包 – st ...

  8. Spring Boot学习笔记-实践建言

    2019独角兽企业重金招聘Python工程师标准>>> 本文延续<Spring Boot学习笔记-快速示例>,从开发指南中摘出一些实践经验可供参考.这也是笔者看到的眼前一 ...

  9. 八个开源的 Spring Boot 学习资源,你值得拥有

    点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:什么?你还在使用fastjson,性能太差了个人原创+1博客:点击前往,查看更多 转载自:牧马小子 Spring ...

最新文章

  1. [深入理解文件系统之十二] ext3文件系统的挂载选项和journal
  2. 2017 OWASP十大安全趋势榜单变化解析
  3. 全面解析Inception Score原理及其局限性
  4. mysql 删除外键
  5. IT运维服务管理问题总结 #F#
  6. SDN Overlay网络中虚机到物理机的数据包的转发
  7. 「镁客·请讲」亮亮视野吴斐:行业应用体现AR硬件的价值本质
  8. 工业控制系统(ICS)
  9. Centos7上搭建迅雷远程下载服务器
  10. 鸡啄米:C++编程入门系列之六(算法的基本控制结构之选择结构)
  11. 情人辞职信 [搞笑,也来个好玩的乐一乐]
  12. Python搭建代理池爬取拉勾网招聘信息
  13. 2009年网络游戏排行榜
  14. 一分钟弄懂什么是分布式和微服务
  15. 高新技术企业认定中涉及的领域有哪些?
  16. 宝峰对讲机16频率表_宝峰uv5r系列对讲机出厂预置频率表-手工编辑版
  17. 对软件公司不要传智播客学生的驳斥
  18. 读书笔记:多智能体机器学习(二)
  19. 10、面试官对于分布式搜索引擎的4个连环炮
  20. ZTE C300 和 M5680T 上下行带宽限速配置(ACL|QoS|Gem-traffic)

热门文章

  1. java6 3_那些年,一起学的Java 6-3
  2. 3dm游戏运行包_动作游戏ACT 逃离丧尸镇 Shadows of Kurgansk 电脑游戏资源
  3. 服务器cpu哪个型号超频,服务器CPU也超频,AMD霄龙性能暴涨1.5倍-控制器/处理器-与非网...
  4. 空间中的语义直线检测_基于语义分割的车道线检测算法研究
  5. java做登录时要加锁吗_你用对锁了吗?谈谈 Java “锁” 事
  6. 20190806:字符串解密
  7. html%3c arial%3e,【博客园】样式美化+网站统计访问+添加网易云背景音乐
  8. java 过滤字符串_java实现压缩字符串和java字符串过滤
  9. 把python37添加到环境变量配置_linux设置python环境变量 分类: python ...
  10. s8050三极管经典电路_电子电路-闪瞎你的眼!爆闪警示灯超简单原理介绍!