一. 什么是异步调用?

异步调用是相对于同步调用而言的,同步调用是指程序按预定顺序一步步执行,每一步必须等到上一步执行完后才能执行,异步调用则无需等待上一步程序执行完即可执行。

二. 如何实现异步调用?

多线程,这是很多人第一眼想到的关键词,没错,多线程就是一种实现异步调用的方式。在非spring目项目中我们要实现异步调用的就是使用多线程方式,可以自己实现Runable接口或者集成Thread类,或者使用jdk1.5以上提供了的Executors线程池。在spring 3.x之后,就已经内置了@Async来完美解决这个问题,下面将介绍在springboot中如何使用@Async。

三. 举例说明(无须知道执行结果):

1、pom.xml中导入必要的依赖:

2、写一个springboot的启动类:

启动类里面使用@EnableAsync注解开启功能,自动扫描

3、建一个service包,然后新建一个UserService类:

要在异步任务的类上写@Component在定义异步任务类写@Async(写在类上代表整个类都是异步,在方法加上代表该类异步执行)

4、建一个controller包,然后新建一个IndexController类,用来获取请求:

先注掉@EnableAsync和@Async两个注解,看下同步调用执行的效果。执行结果如下:

####IndexController#### 1####sendSms#### 2####sendSms#### 3####IndexController#### 4

对于sendSms方法,我们并不关注它什么时候执行完,所以可以采用异步的方式去执行。放开@EnableAsync和@Async两个注解,执行结果如下:

####IndexController#### 1####IndexController#### 4####sendSms#### 2####sendSms#### 3

总结:使用了@Async的方法,会被当成是一个子线程,所有整个sendSms方法,会在主线程执行完了之后执行

四. 举例说明(须知道执行结果):

基于上面例子,这里只贴核心代码

1、启动类

2、异步类

3、controller类

执行结果如下:

任务6耗时=1000任务4耗时=2000任务5耗时=3000执行总耗时=3012

总结:
从上面示例我们可以看出:如果同步方法,那我们需要6秒,而异步执行,我们只需要3秒左右,这就是异步的作用。
1)要把异步任务封装到类里面,不能直接写到Controller
2)增加Future 返回结果 AsyncResult("task执行完成");
3)如果需要拿到结果 需要判断全部的 task.isDone()

springboot 多线程_SpringBoot异步调用@Async相关推荐

  1. 在controller类的每个方法执行前调用某个方法_springboot:异步调用@Async

    作者 |  迷茫中守候 来源 |  urlify.cn/MbMN32 66套java从入门到精通实战课程分享 在后端开发中经常遇到一些耗时或者第三方系统调用的情况,我们知道Java程序一般的执行流程是 ...

  2. springboot之异步调用@Async

    引言: 在Java应用中,绝大多数情况下都是通过同步的方式来实现交互处理的:但是在处理与第三方系统交互的时候,容易造成响应迟缓的情况,之前大部分都是使用多线程来完成此类任务,其实,在spring 3. ...

  3. spring async 默认线程池_springboot:异步调用@Async

    在后端开发中经常遇到一些耗时或者第三方系统调用的情况,我们知道Java程序一般的执行流程是顺序执行(不考虑多线程并发的情况),但是顺序执行的效率肯定是无法达到我们的预期的,这时就期望可以并行执行,常规 ...

  4. 玩转springboot2.x之异步调用@Async

    专题系列分类:玩转SpringBoot2.x系列教程 我们在正常开发中一般都是通过同步的方式进行处理的,但是有时候执行多个任务并不是都需要一起执行完才行,采取异步的方式可以有效提升一个请求响应的时间. ...

  5. Java多线程实现异步调用

    在Java平台,实现异步调用的角色有如下三个角色:调用者. 提货单 .真实数据,一个调用者在调用耗时操作,不能立即返回数据时,先返回一个提货单 .然后在过一断时间后凭提货单来获取真正的数据.去蛋糕店买 ...

  6. 衔接UI线程和管理后台工作线程的类(多线程、异步调用)[转]

    一.引言      在编写Windows form时,如果直接在UI线程要运行一个费时方法的话(如从数据库查询大量数据时),会引起程序"假死",从而导致用户不满.这个时候就需要通过 ...

  7. 面试官 | SpringBoot 中如何实现异步请求和异步调用?

    作者 | 会炼钢的小白龙 来源 | cnblogs.com/baixianlong/p/10661591.html 一.SpringBoot中异步请求的使用 1.异步请求与同步请求 特点: 可以先释放 ...

  8. SpringBoot异步调用方法

    SpringBoot异步调用方法 一.spring boot--使用异步请求,提高系统的吞吐量 https://blog.csdn.net/liuchuanhong1/article/details/ ...

  9. springboot服务调用超时_Spring Boot 异步请求和异步调用,一文搞定

    一.Spring Boot中异步请求的使用 1.异步请求与同步请求 特点: 可以先释放容器分配给请求的线程与相关资源,减轻系统负担,释放了容器所分配线程的请求,其响应将被延后,可以在耗时处理完成(例如 ...

最新文章

  1. JAVA 静态变量与静态方法
  2. LOJ#6374 网格
  3. hbase replication原理分析
  4. 三年Java开发,java基础常问面试题
  5. [luoguP4142]洞穴遇险
  6. mysql镜像_Mysql phpmyadmin docker镜像安装
  7. 深度学习在文本领域的应用
  8. thinkpad分区win10_预装win10系统Thinkpad笔记本只有一个C盘怎么分区
  9. 解决局域网访问共享工具
  10. 群晖Docker部署Calibre Web打造全功能书库
  11. html 还原键盘默认事件,js阻止默认事件 (两种方法)及键盘事件onkeydown 、 onkeypress 、onkeyup实例讲解...
  12. 树莓派4b vnc黑屏显示Cannot currently show the desktop解决办法
  13. DeepCross(DCN)模型及torch实现
  14. 原创玄幻小说--那时花开--第一章前序
  15. CATIA V5-6 R2017 支架类零件设计
  16. WIN10下没有NVIDIA控制面板的解决办法
  17. GEF活性检测试剂盒的主要用途和应用
  18. VUE3 响应式 API 之 toRef 与 toRefs
  19. [css] 怎么自定义鼠标指针的图案?
  20. JavaScript 基本面试问题总结

热门文章

  1. python 中*args 和 **kwargs的区别
  2. 数据结构与算法——线性结构——线性表及其表示
  3. spring Bean自动装配
  4. 【Spring】基于XML的IOC案例
  5. python list 删除元素
  6. Tensorflow安装问题: Could not find a version that satisfies the requirement tensorflow pip命令...
  7. Compiler编译过程
  8. MinkowskiNonlinearities非线性
  9. 常用数据结构讲解与案例分析
  10. 高并发下接口幂等性技术方案