Spring [email protected]编程语言

 补充一个知识点:

lombok底层原理使用的是: 字节码技术ASM修改字节码文件,生成比如类似于get() set( )方法

一定要在开发工具安装 在编译时候修改字节码文件(底层使用字节码技术),线上环境使用编译好的文件

 

下面我们学习 Spring Boot 异步调用技术:

[email protected] ,需要执行异步方法上加入    @Async

[email protected] 底层使用多线程技术

在底层实际上是帮助创建线程了 

首先创建类:MembrController

  package com.toov5.jsp; 
 
 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.web.bind.annotation.RestController; 
 
import com.toov5.service.MemberService; 
 
import lombok.extern.slf4j.Slf4j; 
 
@RestController 
@Slf4j 
public class MemberController { 
  @Autowired 
  private MemberService memberService; 
   
    public String addMemberAndEmail(){ 
       log.info("1"); 
       String result = memberService.addMemberAndEmail(); 
       log.info("4"); 
       return result; 
    } 
     
}

MemberService

package com.toov5.service; 
 
import org.springframework.stereotype.Service; 
 
import lombok.extern.slf4j.Slf4j; 
 
@Service 
@Slf4j 
public class MemberService { 
    //添加用户时候发送邮件 
    public String addMemberAndEmail(){ 
        log.info("2");   
        try { 
            Thread.sleep(5000); 
        } catch (Exception e) { 
            // TODO: handle exception 
        } 
        log.info("3"); 
        return "toov5"; 
 
    } 
     
     
}

我们做个分析:

这个项目是没有开线程的情况下的,代码从上往下同步进行的,log输出结果就是1 2 3 return返回结果  4 然后返回结果 

看结果:

 Spring [email protected]编程语言

先输出1 2  然后 五秒 后 3  4  效果是同步的

下面隆重接受一个注解

@Async 相当于这个方法重新开辟了新的线程去执行

Spring [email protected]编程语言

 

然后启动类一定要加上启动的注解!!!@EnableAsync

 Spring [email protected]编程语言

 加上 @EnableAsync看看指定的包里面  [email protected] 加了的在运行时候通过AOP技术,创建线程去执行

执行结果:

Spring [email protected]编程语言

controller的代码这样:

  package com.toov5.jsp; 
 
 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RestController; 
 
import com.toov5.service.MemberService; 
 
import lombok.extern.slf4j.Slf4j; 
 
@RestController 
@Slf4j 
public class MemberController { 
  @Autowired 
  private MemberService memberService; 
     
    @RequestMapping("/addMemberAndEmail") 
    public String addMemberAndEmail(){ 
       log.info("1"); 
       String result = memberService.addMemberAndEmail(); 
       log.info("4"); 
       return "result"+result; 
    } 
     
}

结果:

Spring [email protected]编程语言

 

 结果值是没有拿到 主线程就后已经结束了哈 所以为 null

 

原理思路:

使用AOP技术,在运行时候 创建单独线程进行执行 

可以这么代替:

package com.toov5.service; 
 
 
import org.springframework.stereotype.Service; 
 
import lombok.extern.slf4j.Slf4j; 
 
@Service 
@Slf4j 
public class MemberService { 
    //添加用户时候发送邮件 
//	@Async 
//	public String addMemberAndEmail(){ 
//		log.info("2");   
//		try { 
//			Thread.sleep(5000); 
//		} catch (Exception e) { 
//			// TODO: handle exception 
//		} 
//		log.info("3"); 
//		return "toov5"; 
// 
//	} 
 
	public String addMemberAndEmail(){ 
		 
	   new Thread(new Runnable() { 
		 
		public void run() { 
		 
			log.info("2");   
			try { 
				Thread.sleep(5000); 
			} catch (Exception e) { 
				// TODO: handle exception 
			} 
			log.info("3"); 
//			return "toov5";  //这里应该用从callable  有返回值 或者future模式 
				 
		} 
	}).start(); 
	 
	   return "toov5";  //将就下 返回值由于是用的runnable写的嘛 先这样迁就下 
		 
	} 
	 
	 
 
		 
} 

 效果:

Spring [email protected]编程语言

 

 Spring [email protected]编程语言

小伙伴是不是很好玩呀?赶紧尝试一下吧~

 

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/16168.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论