zoukankan      html  css  js  c++  java
  • springBoot---使用@Async实现异步调用

    1.基础:@Async实际上就是多线程封装的

    2.我们看看实现的理论,异步线程执行方法有可能会非常消耗cpu的资源,所以大的项目建议使用Mq异步实现

     

     3.我们先看看单线程的代码

     我们看看单线程运行的结果

     

     package demo.controller;

    import lombok.extern.slf4j.Slf4j;

    import org.springframework.web.bind.annotation.RequestMapping;

    import org.springframework.web.bind.annotation.RestController;

    @RestController

    @Slf4j

    public class MemberService {

        @RequestMapping("/addMember")

        public String addMember(){

            log.info("模拟插入到数据库0001");

            //发送短信

            sms();

            log.info("用户注册成功0004");

            return "用户注册成功";

        }

        public String sms(){

            log.info("<0002>");

            try{

                log.info("正在发送短信");

                Thread.sleep(3000);

            }catch(Exception e){

            }

            log.info("<0003>");

            return "发送短信成功";

        }

    }

    4.我们改造一下成多线程

     5.运行看看效果

    package demo.controller;

    import lombok.extern.slf4j.Slf4j;

    import org.springframework.web.bind.annotation.RequestMapping;

    import org.springframework.web.bind.annotation.RestController;

    @RestController

    @Slf4j

    public class MemberService {

        @RequestMapping("/addMember")

        public String addMember(){

            log.info("模拟插入到数据库0001");

            //发送短信

            new Thread(new Runnable(){

                @Override

                public void run(){

                    sms();

                }

            }).start();

            log.info("用户注册成功0004");

            return "用户注册成功";

        }

        public String sms(){

            log.info("<0002>");

            try{

                log.info("正在发送短信");

                Thread.sleep(3000);

            }catch(Exception e){

            }

            log.info("<0003>");

            return "发送短信成功";

        }

    }

     

     

    package demo.controller;
    import lombok.extern.slf4j.Slf4j;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;
    @RestController@Slf4jpublic class MemberService {    @RequestMapping("/addMember")    public String addMember(){        log.info("模拟插入到数据库0001");        //发送短信        sms();        log.info("用户注册成功0004");        return "用户注册成功";    }    public String sms(){        log.info("<0002>");        try{            log.info("正在发送短信");            Thread.sleep(3000);        }catch(Exception e){
            }        log.info("<0003>");        return "发送短信成功";    }}

    沫笙
  • 相关阅读:
    网络知识: 物理层PHY 和 网络层MAC
    Android lowmemorykiller
    devres in linux driver
    spinlock in linux kernel
    JavaWeb图片URL中文乱码
    Linux 里的 2>&1含义
    python脚本linux上后台执行
    linux之定时任务
    python中if not x: 和 if x is not None: 和 if not x is None的使用和区别
    私钥和公钥的区别和联系
  • 原文地址:https://www.cnblogs.com/wendy-0901/p/14356732.html
Copyright © 2011-2022 走看看