SpringBoot 异步任务 
javaSpringBootasynctask
开启异步任务 
启动类开启异步任务 
异步服务业务 
java
@Service
public class TaskService {
  /**
   * 异步服务,无返回值
   */
  @Async
  public void sendMsg() throws Exception {
    System.out.println("任务服务消息开启...");
    long sTime = System.currentTimeMillis();
    System.out.println("开始时间:" + sTime);
    Thread.sleep(5000);
    long eTime = System.currentTimeMillis();
    System.out.println("结束时间:" + eTime);
    System.out.println("总用时:" + (eTime - sTime));
  }
  /**
   * 异步服务,有返回值
   */
  @Async
  public Future<Integer> TaskA() throws InterruptedException {
    System.out.println("TaskA 开始执行");
    long sTime = System.currentTimeMillis();
    System.out.println("TaskA 开始时间:" + sTime);
    Thread.sleep(5000);
    Integer res = Math.toIntExact(Math.round(Math.random() * 1000000));
    long eTime = System.currentTimeMillis();
    System.out.println("TaskA 结束时间:" + eTime);
    System.out.println("TaskA 总用时:" + (eTime - sTime));
    return new AsyncResult<Integer>(res);
  }
  /**
   * 异步服务,有返回值
   */
  @Async
  public Future<Integer> TaskB() throws InterruptedException {
    System.out.println("TaskB 开始执行");
    long sTime = System.currentTimeMillis();
    System.out.println("TaskB 开始时间:" + sTime);
    Thread.sleep(5000);
    Integer res = Math.toIntExact(Math.round(Math.random() * 1000000));
    long eTime = System.currentTimeMillis();
    System.out.println("TaskB 结束时间:" + eTime);
    System.out.println("TaskB 总用时:" + (eTime - sTime));
    return new AsyncResult<Integer>(res);
  }
}@Service
public class TaskService {
  /**
   * 异步服务,无返回值
   */
  @Async
  public void sendMsg() throws Exception {
    System.out.println("任务服务消息开启...");
    long sTime = System.currentTimeMillis();
    System.out.println("开始时间:" + sTime);
    Thread.sleep(5000);
    long eTime = System.currentTimeMillis();
    System.out.println("结束时间:" + eTime);
    System.out.println("总用时:" + (eTime - sTime));
  }
  /**
   * 异步服务,有返回值
   */
  @Async
  public Future<Integer> TaskA() throws InterruptedException {
    System.out.println("TaskA 开始执行");
    long sTime = System.currentTimeMillis();
    System.out.println("TaskA 开始时间:" + sTime);
    Thread.sleep(5000);
    Integer res = Math.toIntExact(Math.round(Math.random() * 1000000));
    long eTime = System.currentTimeMillis();
    System.out.println("TaskA 结束时间:" + eTime);
    System.out.println("TaskA 总用时:" + (eTime - sTime));
    return new AsyncResult<Integer>(res);
  }
  /**
   * 异步服务,有返回值
   */
  @Async
  public Future<Integer> TaskB() throws InterruptedException {
    System.out.println("TaskB 开始执行");
    long sTime = System.currentTimeMillis();
    System.out.println("TaskB 开始时间:" + sTime);
    Thread.sleep(5000);
    Integer res = Math.toIntExact(Math.round(Math.random() * 1000000));
    long eTime = System.currentTimeMillis();
    System.out.println("TaskB 结束时间:" + eTime);
    System.out.println("TaskB 总用时:" + (eTime - sTime));
    return new AsyncResult<Integer>(res);
  }
}不要使用 测试单元运行,会出现异步业务没有执行结束,项目就停止运行了
Controller 类 
java
@RestController
public class AsyncTaskController {
  @Autowired
  TaskService taskService;
  @GetMapping("/voidReturnTask")
  public String voidReturnTask() throws Exception {
    long sTime = System.currentTimeMillis();
    taskService.sendMsg();
    long eTime = System.currentTimeMillis();
    System.out.println("voidReturnTask run Time:" + (eTime - sTime) + "s");
    return "voidReturnTask success";
  }
  @GetMapping("/hasReturnTask")
  public String hasReturnTask() throws Exception {
    long sTime = System.currentTimeMillis();
    Future<Integer> taskA = taskService.TaskA();
    Future<Integer> taskB = taskService.TaskB();
    int i = taskA.get() + taskB.get();
    System.out.println("两个任务结果:" + i);
    long eTime = System.currentTimeMillis();
    System.out.println("hasReturnTask run Time:" + (eTime - sTime) + "s");
    return "hasReturnTask success";
  }
}@RestController
public class AsyncTaskController {
  @Autowired
  TaskService taskService;
  @GetMapping("/voidReturnTask")
  public String voidReturnTask() throws Exception {
    long sTime = System.currentTimeMillis();
    taskService.sendMsg();
    long eTime = System.currentTimeMillis();
    System.out.println("voidReturnTask run Time:" + (eTime - sTime) + "s");
    return "voidReturnTask success";
  }
  @GetMapping("/hasReturnTask")
  public String hasReturnTask() throws Exception {
    long sTime = System.currentTimeMillis();
    Future<Integer> taskA = taskService.TaskA();
    Future<Integer> taskB = taskService.TaskB();
    int i = taskA.get() + taskB.get();
    System.out.println("两个任务结果:" + i);
    long eTime = System.currentTimeMillis();
    System.out.println("hasReturnTask run Time:" + (eTime - sTime) + "s");
    return "hasReturnTask success";
  }
}运行 
在浏览器分别访问
localhost:8088/voidReturnTasklocalhost:8088/hasReturnTask

