异步方法调用是希望快速相应前台界面,而不至于应为后台操作太慢了卡死在哪里。
例如:

package springboot.service;import org.springframework.stereotype.Service;@Service
public class ServiceImpl implements IService{@Overridepublic void testAsync() {new Thread(()->{//业务代码System.out.println("异步业务开始执行");long startTime = System.currentTimeMillis();int count = 5;while(count>0){try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}System.out.println("倒计时"+count);count--;}long endTime = System.currentTimeMillis();long usedTime = endTime - startTime;System.out.println("异步业务执行完毕,共耗时"+usedTime);}).start();}
}
package springboot.controller;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import springboot.service.IService;@RestController
public class HelloController {@Autowiredprivate IService iService;@GetMapping("test")public String test(){iService.testAsync();return "调用接口返回";}
}

接口调用马上就返回了,

但调用的方法还在后台继续执行

二、Springboot中Async注解的使用

异步任务上加上 @Async注解

    @Asyncpublic void testAsync(){System.out.println("异步任务开始执行");long startTime = System.currentTimeMillis();int count =5;while(count>=0){try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}int complete = 100-(100*count/5);System.out.println("任务执行倒计时"+count+",完成"+complete+"%");count--;}long endTime = System.currentTimeMillis();long usedTime = endTime - startTime;System.out.println("任务执行完毕,共耗时"+usedTime);}

使用异步注解@Async 需要在启动类加上@EnableAsync

package springboot;import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableAsync;@SpringBootApplication
@EnableAsync //使用异步注解@Async 需要在这里加上@EnableAsync
@MapperScan("springboot.dao") //不可或缺作用是扫描dao包下面的所有mapper装配
public class HelloApplication {public static void main(String[] args) {SpringApplication.run(HelloApplication.class,args);}
}

Controller调用演示

    @GetMapping("testAsync")public ResponseDTO testAsync(){tUserService.testAsync();return ResponseDTO.success();}

在浏览器请求,马上就返回了,说明异步注解生效

马上,转到后台,看见异步任务仍在执行

SpringBoot @Async注解的学习相关推荐

  1. [SpringBoot的@Async注解和关键字synchronized的使用]

    SpringBoot 的@Async的使用和关键字synchronized的使用 多线程 SpringBoot 的@Async的使用和关键字synchronized的使用 前言 一.@Async注解创 ...

  2. SpringBoot利用@Async注解实现异步调用

    前言:异步编程是让程序并发运行的一种手段,使用异步编程可以大大提高我们程序的吞吐量,减少用户的等待时间.在Java并发编程中实现异步功能,一般是需要使用线程或者线程池.而实现一个线程,要么继承Thre ...

  3. 都在建议你不要直接使用 @Async 注解,为什么?

    今日推荐 扔掉 Postman,一个工具全部搞定,真香!为啥查询那么慢?还在直接用JWT做鉴权?JJWT真香推荐 15 款常用开发工具干掉 navicat:这款 DB 管理工具才是y(永)y(远)d( ...

  4. Spring及SpringBoot @Async配置步骤及注意事项

    前言 最近在做一个用户反馈的功能,就是当用户反馈意见或建议后服务端将意见保存然后发邮件给相关模块的开发者.考虑发邮件耗时的情况所以我想用异步的方法去执行,于是就开始研究Spring的@Async了.但 ...

  5. springboot异步注解_SpringBoot如何实现异步、定时任务?

    (一)异步任务 异步任务的需求在实际开发场景中经常遇到,Java实现异步的方式有很多,比如多线程实现异步.在SpringBoot中,实现异步任务只需要增加两个注解就可以实现.当前类添加@Async注解 ...

  6. 【日常】SpringBoot缓存注解器及整合redis实现(附近期一些python零碎的内容)

    序言 似乎灵感枯竭了,完全不知道该写些什么东西,非常的痛苦,决定走读博这条路之后就失去了很多乐趣,总是想应该积累更多的论文和相关项目代码量,但是效率却总是很低,需要应付课程与考试,一篇paper的阅读 ...

  7. SpringBoot整合第三方技术学习笔记(自用)

    SpringBoot整合第三方技术学习笔记 搬运黑马视频配套笔记 KF-4.数据层解决方案 KF-4-1.SQL 回忆一下之前做SSMP整合的时候数据层解决方案涉及到了哪些技术?MySQL数据库与My ...

  8. @Async注解的坑,小心

    背景 前段时间,一个同事小姐姐跟我说她的项目起不来了,让我帮忙看一下,本着助人为乐的精神,这个忙肯定要去帮. 于是,我在她的控制台发现了如下的异常信息: Exception in thread &qu ...

  9. @Async注解测试用例附源码(一)

    @Async注解测试用例附源码(一) 问题背景 @Async注解测试用例附源码(一) @Async注解异步线程不生效解决方案(二) @Async测试用例 问题总结 测试用例源码下载 Lyric: 我在 ...

  10. @Async注解其实也就这么回事

    前言 我习惯用自定义线程池的方式去做一些异步的逻辑,且这么多年一直都是这样用的. 所以如果是我主导的项目,你在项目里面肯定是看不到 @Async 注解的. 那我之前见过 @Async 注解吗? 肯定是 ...

最新文章

  1. 【J2SE】语言基础
  2. UESTC-1057 秋实大哥与花(线段树+成段加减+区间求和)
  3. acid php5,ACID原则
  4. 学用 ASP.Net 之 System.Collections.Specialized.CollectionsUtil 类
  5. 吴恩达机器学习006分类问题
  6. 我在STM32单片机上跑神经网络算法
  7. DouPHP 1.5 Release
  8. Android 蓝牙模块
  9. IOS图像拉伸解决方案
  10. 3号团队-团队任务5:项目总结会
  11. 微信小程序发送模板消息通知
  12. 瑞利信道,莱斯信道和高斯信道模型
  13. 004--python--华氏温度和摄氏温度的转换
  14. 点计算机图标就自动关机了,如何设置电脑到点自动关机
  15. css和html实现梦幻西游页面特效
  16. dirver时区_时区问题
  17. Node-Red UI界面基础设计
  18. 中秋节到了我给大家用python做一个月饼
  19. 手机端别用谷歌了,好用到爆的小众浏览器你确定不试试
  20. JAVA核心知识点--JDK1.8中的日期处理

热门文章

  1. C语言实现matlab的interp2()函数
  2. 开发必学的验证码,教你从零写一个验证码
  3. python基础--合并两个列表
  4. Zabbix 3.0安装
  5. webpack多页面构建优化不完全指北
  6. Grafana Panel配置数据源
  7. 什么是git subcommand,如何创建git子命令?
  8. css3 flex流动自适应响应式布局样式类
  9. struts2学习——拦截器
  10. Processing的条件式