启动类:添加@EnableAsync注解

@SpringBootApplication

@EnableAsync

public class Application{

  public static void main(String[] args) {

    SpringApplication.run(Application.class, args);

  }

}

Controller类

@RequestMapping("")

@RestController
public class AsyncTaskController {

  @Autowired
  private AsyncTask asyncTask;

  @RequestMapping("")
  public String doTask() throws InterruptedException{
    long currentTimeMillis = System.currentTimeMillis();
    Future<String> task1 = asyncTask.task1();

    Future<String> task2 = asyncTask.task2();
    Future<String> task3 = asyncTask.task3();
    String result = null;
    for (;;) {
      if(task1.isDone() && task2.isDone() && task3.isDone()) {
      // 三个任务都调用完成,退出循环等待
      break;
      }
      Thread.sleep(1000);
    }

    long currentTimeMillis1 = System.currentTimeMillis();

    result = "task任务总耗时:"+(currentTimeMillis1-currentTimeMillis)+"ms";
    return result;

  }
}

异步任务类
@Component
public class AsyncTask {

  @Async
  public Future<String> task1() throws InterruptedException{
    long currentTimeMillis = System.currentTimeMillis();
    Thread.sleep(1000);
    long currentTimeMillis1 = System.currentTimeMillis();
    System.out.println("task1任务耗时:"+(currentTimeMillis1-currentTimeMillis)+"ms");

    return new AsyncResult<String>("task1执行完毕");
  }

  @Async
  public Future<String> task2() throws InterruptedException{
    long currentTimeMillis = System.currentTimeMillis();
    Thread.sleep(2000);
    long currentTimeMillis1 = System.currentTimeMillis();
    System.out.println("task2任务耗时:"+(currentTimeMillis1-currentTimeMillis)+"ms");

     return new AsyncResult<String>("task2执行完毕");
  }

  @Async
  public Future<String> task3() throws InterruptedException{
    long currentTimeMillis = System.currentTimeMillis();
    Thread.sleep(3000);
    long currentTimeMillis1 = System.currentTimeMillis();
    System.out.println("task3任务耗时:"+(currentTimeMillis1-currentTimeMillis)+"ms");

      return new AsyncResult<String>("task3执行完毕");
  }

}

结果:

  1. task1任务耗时:1000ms
  2. task2任务耗时:2001ms
  3. task3任务耗时:3001ms

  task任务总耗时:4015ms

转载于:https://www.cnblogs.com/fantjesse/p/9447661.html

springboot-异步线程调用相关推荐

  1. python3多进程写Kafka异步线程调用接口

    #!/usr/bin/env python # -*- coding: utf-8 -*- # @Author: 风过无言花易落 # @Date : 2022/02/14 22:30 # @Desc ...

  2. springboot使用异步线程池执行自定义任务实例

    文章目录 1.介绍 配置类 业务层 控制层 1.介绍 在Spring中存在一个AsyncConfigurer接口,它是一个可以配置异步线程池的接口,因此只需要Java配置文件,实现AsyncConfi ...

  3. 复盘SpringBoot中定时任务和异步线程池

    作者:溪~源 blog.csdn.net/xuan_lu/article/details/110568508 项目中最近使用了多个定时任务处理业务需求,于是在实现业务逻辑过程中,产生了上图一些思考和疑 ...

  4. SpringBoot 最简单的使用异步线程案例 @Async

    在网上找了很多很多资料,使用多线程.异步线程等等,很多配置,方法也多多: 那么,我向来都是以简单,够用为目标,下面我介绍的就是我认为已经非常非常简单的异步线程使用的方法了. 说到简单,当然是使用注解. ...

  5. SpringBoot异步调用方法

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

  6. SpringBoot中异步线程池AsynConfigurer配置

    目录​​​​​​​ 什么是AsynConfigurer 为什么需要AsynConfigurer 怎么配置AsynConfigurer 注意事项 统一异常捕获 其他相关类 AsyncExecutionI ...

  7. 新手也能看懂的 SpringBoot 异步编程指南

    通过本文你可以了解到下面这些知识点: Future 模式介绍以及核心思想 核心线程数.最大线程数的区别,队列容量代表什么: ThreadPoolTaskExecutor饱和策略: SpringBoot ...

  8. 复盘Spring中定时任务和异步线程池

    ​ 项目中最近使用了多个定时任务处理业务需求,于是在实现业务逻辑过程中,产生了上图一些思考和疑问,现在利用空余时间进行一次复盘. 项目搭建 项目搭建环境:JDK1.8+SpringBoot 主启动类: ...

  9. springboot异步和切面_Spring异步编程 你的@Async就真的异步吗?异步历险奇遇记

    引言有点长 前端的宝宝会用ajax,用异步编程到快乐的不行~ 我们java也有异步,用起来比他们还快乐~ 我们biaji一个注(gǒupí)解(gāoyào),也是快乐风男... 且看下面的栗子: 注 ...

  10. springboot异步和切面_Spring异步编程 | 你的@Async就真的异步吗 ☞ 异步历险奇遇记...

    引言有点长 前端的宝宝会用ajax,用异步编程到快乐的不行~ 我们java也有异步,用起来比他们还快乐~ 我们bia~ji~一个注(gǒupí)解(gāoyào),也是快乐风男... 且看下面的栗子: ...

最新文章

  1. c 语言set用法,使用
  2. php中data(,如何使用php中的data函数
  3. 如何在Hybris Backoffice里给用户维护电话号码
  4. 算法训练 Pollution Solution(计算几何)
  5. 传统手工特征--opencv
  6. 最大值减最小值等于区间长度_呆哥数学每日一题 ——三角函数求余弦最小值...
  7. Windows下anyproxy的配置文件路径
  8. hadoop1.x异常
  9. 易筋SpringBoot 2.1 | 第廿三篇:SpringBoot之Docker入门
  10. Pycharm安装scrapy以及初始化爬虫项目
  11. C++端部署pytorch, libtorc使用教程(精简版)
  12. Vue - 加载静态图片的方式
  13. python抢淘宝的东西-Python实现淘宝秒杀功能
  14. 思科认证华为认证的区别
  15. 小学生python编程教程-小学生python编程在线教育-小码精灵编程线上教育机构
  16. 南京大学计算机 曹云浩,【2015.青春曲园】第二十六届“迎校庆”校园十佳歌手大赛独家放送~...
  17. java软件工程师自我评价_Java开发工程师岗位自我评价怎么写
  18. python 怎么算l2范数_向量范数与矩阵范数(L0, L1, L2)
  19. 王俊杰:苏宁AI在智慧零售上的应用
  20. 人工智能普及应用面临的三大挑战

热门文章

  1. SpringData ES中一些底层原理的分析
  2. ThinkPHP的A方法,R方法,M方法,D方法区别
  3. Quick-Cocos2d-x初学者游戏教程(五) --------------------- 辅助工具和跳转场景
  4. android 开发怎么让程序生成的图片文件不会被系统扫描到
  5. 7个碎片的excel重组实验
  6. 教你使用Wine在Linux上运行Windows软件
  7. Linux电源管理-wakeup events framework
  8. 开发内功修炼CPU篇
  9. (四)洞悉linux下的Netfilteriptables:包过滤子系统iptable_filter
  10. CodeForces - 976C(结构体排序思维)