springboot-11- 异步任务处理

1. 异步任务的使用场景

异步任务是相对于同步任务来讲,同步任务就是顺序执行的任务,前面的任务没有执行完,后面的任务只能等待,而异步任务不同,它可以多个任务并行执行,异步任务有很多优点:
(1)减少主流程执行时间,避免主业务被长时间阻塞,提升服务器处理请求的并量
(2)避免因为一个辅助功能的处理失败而导致整个请求失败
比如,用户下单之后,可能系统会赠送一些积分之类的,赠送积分并不是主要流程,整个过程可以放到异步任务或者消息队列中去完成,异步任务还适用于处理log、发送邮件、短信等

2. springboot异步任务如何使用

  1. 启动类里面使用@EnableAsync注解开启功能,自动扫描
  2. 定义异步任务类并使用@Component标记组件被容器扫描,异步方法加上@Async,需要注意以下几点:
    * 要把异步任务封装到类里面,不能直接写到Controller
    * 增加Future 返回结果 AsyncResult(“task执行完成”);
    * 如果需要拿到结果 需要判断全部的 task.isDone()
  3. 通过注入方式,注入到controller里面
2.1 不带返回值的异步任务
  • 定义异步任务类,分别定义三个异步任务方法,方法中分别睡眠1s, 2s, 4s
package com.example.springbootdemo4.service;

import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;

/**
 * 异步任务类,注意点:不能直接写到Controller里
 */
@Component
public class AsyncTask {
   

    /**
     * 异步任务1,     @Async把该方法标记为一个异步方法,或者把方法上的注解挪到类上面也可以!
     * @throws InterruptedException
     */
    @Async
    public void asyncTask1() throws InterruptedException {
   
        long begin = System.currentTimeMillis();
        Thread.sleep(1000);
        long end = System.currentTimeMillis();
        System.out.println("任务1耗时:" + (end-begin)) ;
    }
    @Async
    public void asyncTask2() throws InterruptedException {
   
        long begin = System.currentTimeMillis();
        Thread.sleep(2000);
        long end = System.currentTimeMillis();
        System.out.println("任务2耗时:" + (end-begin)) ;
    }
    @Async
    public void asyncTask3() throws InterruptedException {
   
        long begin = System
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值