zoukankan      html  css  js  c++  java
  • springboot-异步线程调用

    启动类:添加@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

  • 相关阅读:
    PHP 上传文件 function move_uploaded_file: failed to open stream
    python super() 方法使用
    python 负数转为无符号整数
    python Aes 加密 解密
    mongoDB 启动 Error: couldn't connect to server 127.0.0.1:27017 src/mongo/shell/mongo.js:91
    ansible使用
    字段类型binary
    7-14 求整数段和
    7-13 日K蜡烛图
    7-12 两个数的简单计算器
  • 原文地址:https://www.cnblogs.com/fantjesse/p/9447661.html
Copyright © 2011-2022 走看看