目录
一、异步与同步介绍
二、SpringBoot实现异步
【一心同学】正在参加【博客之星】
希望各位大佬能够投【五星】⭐ ⭐ ⭐ ⭐ ⭐给予【一心同学】,每一份投票都是【一心同学】的动力。
【一心同学】投票专区入口:https://bbs.csdn.net/topics/603956556
想要学到更多后端知识,欢迎关注【一心同学】
❤️❤️❤️感谢各位大可爱小可爱!❤️❤️❤️
一、异步与同步介绍
异步(async)是相对于同步(sync)来说的,简单理解,同步是串行的,异步是并行的。
好比说,A需要从B和C两个节点获取数据
第一种方式,A请求B,B返回给A数据,A再去请求C,在从C出获得数据。这种方式就是同步。
另一种方式,A去请求B,不等B返回数据,就去请求C,然后等B和C准备好数据再推送给A,A同样可以拿到B和C的数据,这就是异步。
注意:第二种方式B和C是同时处理A的请求的,是比第一种方式效率要高的,但是这种方式,有一个限制,就是从B和C之间要获取的数据不能有依赖关系,假如获取C的数据时候,C需要从B返回来的数据,那就只能采用第一种方式,先请求B,拿到B的数据,在去请求C。
二、SpringBoot实现异步分析:
异步和同步是两种处理方式,同步适用的场景多,编码简单,便于理解,但是在某些特定的场景下异步比同步效率会高出很多。
一心同学的目录:
(1)创建一个service包
(2)创建一个类AsyncService
(3)编写方法,表示处理数据,利用线程设置延迟
package com.yixin.demo.service; import org.springframework.stereotype.Service; @Service public class AsyncService { public void work(){ System.out.println("一心同学正在处理数据"); try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("数据处理完毕"); } }
(4)创建controller包并编写Controller类
@RestController public class MyController { @Autowired AsyncService asyncService; @RequestMapping("/get") public String get(){ asyncService.work(); return "success"; } }
(5)访问http://localhost:8080/get进行测试,3秒后出现success,这是同步等待的情况。
(6)给work方法添加@Async注解
@Service public class AsyncService { //告诉Spring这是一个异步方法 @Async public void work(){ System.out.println("一心同学正在处理数据"); try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("数据处理完毕"); } }
SpringBoot就会自己开一个线程池,进行调用!
注意:要让这个注解生效,我们还需要在主程序上添加一个注解@EnableAsync ,开启异步注解功能;
主程序类:
@EnableAsync //开启异步注解功能 @SpringBootApplication public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } }
(7)重启测试,会发现网页立即响应,输出“success"!
从这个案例可以看出,异常 *** 作可以大大的提高我们的工作效率!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)