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 "发送短信成功"; }}