springboot 異步調(diào)用的實(shí)現(xiàn)方法
說(shuō)異步調(diào)用前,我們說(shuō)說(shuō)它對(duì)應(yīng)的同步調(diào)用。通常開(kāi)發(fā)過(guò)程中,一般上我們都是同步調(diào)用,即:程序按定義的順序依次執(zhí)行的過(guò)程,每一行代碼執(zhí)行過(guò)程必須等待上一行代碼執(zhí)行完畢后才執(zhí)行。而異步調(diào)用指:程序在執(zhí)行時(shí),無(wú)需等待執(zhí)行的返回值可繼續(xù)執(zhí)行后面的代碼。顯而易見(jiàn),同步有依賴相關(guān)性,而異步?jīng)]有,所以異步可并發(fā)執(zhí)行,可提高執(zhí)行效率,在相同的時(shí)間做更多的事情。
同步
程序按照定義順序依次執(zhí)行,每一行程序都必須等待上一行程序執(zhí)行完成之后才能執(zhí)行,就是在發(fā)出一個(gè)功能調(diào)用時(shí),在沒(méi)有得到結(jié)果之前,該調(diào)用就不返回。
異步
程序在順序執(zhí)行時(shí),不等待異步調(diào)用的語(yǔ)句返回結(jié)果就執(zhí)行后面的程序,當(dāng)一個(gè)異步過(guò)程調(diào)用發(fā)出后,調(diào)用者不能立刻得到結(jié)果。
同步代碼
Service層:
public void test() throws InterruptedException {
Thread.sleep(2000);
for (int i = 0; i < 1000; i++) {
System.out.println("i = " + i);
}
}
Controller層:
@GetMapping("test")
public String test() {
try {
Thread.sleep(1000);
System.out.println("主線程開(kāi)始");
for (int j = 0; j < 100; j++) {
System.out.println("j = " + j);
}
asyncService.test();
System.out.println("主線程結(jié)束");
return "async";
} catch (InterruptedException e) {
e.printStackTrace();
return "fail";
}
}
瀏覽器中請(qǐng)求 http://localhost:8080/test
控制臺(tái)打印順序:
- 主線程開(kāi)始
- 打印j循環(huán)
- 打印i循環(huán)
- 主線程結(jié)束
異步代碼
在Service層的test方法上加上@Async注解,同時(shí)為了是異步生效在啟動(dòng)類上加上@EnableAsync注解
Service層:
@Async
public void test() throws InterruptedException {
Thread.sleep(2000);
for (int i = 0; i < 1000; i++) {
System.out.println("i = " + i);
}
}
Controller不變,啟動(dòng)類加上@EnableAsync:
@SpringBootApplication
@EnableAsync
public class AsyncApplication {
public static void main(String[] args) {
SpringApplication.run(AsyncApplication.class, args);
}
}
再次請(qǐng)求打印順序如下:
- 主線程開(kāi)始
- 打印j循環(huán)
- 主線程結(jié)束
- 打印i循環(huán)
代碼: async
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- SpringBoot實(shí)現(xiàn)定時(shí)任務(wù)和異步調(diào)用
- SpringBoot開(kāi)啟異步調(diào)用方法
- SpringBoot異步調(diào)用方法實(shí)現(xiàn)場(chǎng)景代碼實(shí)例
- springboot實(shí)現(xiàn)異步調(diào)用@Async的示例
- 一文詳解SpringBoot如何優(yōu)雅地實(shí)現(xiàn)異步調(diào)用
- 三種SpringBoot中實(shí)現(xiàn)異步調(diào)用的方法總結(jié)
- SpringBoot使用@Async注解實(shí)現(xiàn)異步調(diào)用
- SpringBoot中的定時(shí)任務(wù)和異步調(diào)用詳解
- 淺談SpringBoot實(shí)現(xiàn)異步調(diào)用的幾種方式
相關(guān)文章
SpringBoot注入靜態(tài)屬性或靜態(tài)對(duì)象的方法
我們?cè)谑褂肧pringBoot為一些靜態(tài)屬性或者靜態(tài)對(duì)象注入時(shí)會(huì)發(fā)現(xiàn)注入不成功,我們可以以下這幾種方式把需要注入的值注入到靜態(tài)屬性中,感興趣的朋友一起看下2024-12-12
基于MapReduce實(shí)現(xiàn)決策樹(shù)算法
這篇文章主要為大家詳細(xì)介紹了基于MapReduce實(shí)現(xiàn)決策樹(shù)算法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-08-08
RocketMQ生產(chǎn)者調(diào)用start發(fā)送消息原理示例
這篇文章主要為大家介紹了RocketMQ生產(chǎn)者調(diào)用start發(fā)送消息原理示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11
[Java]詳解Socket和ServerSocket學(xué)習(xí)筆記
即時(shí)類應(yīng)用或者即時(shí)類的游戲,HTTP協(xié)議很多時(shí)候無(wú)法滿足于我們的需求,這會(huì),Socket對(duì)于我們來(lái)說(shuō)就非常實(shí)用了。本篇文章主要介紹了Socket和ServerSocket,有興趣的可以了解一下。2016-12-12
springboot AutoConfigureAfter控制Bean的注入順序方法詳解
這個(gè)文章主要介紹一下@AutoConfigureAfter在spring框架中的作用,在使用過(guò)程中,很多開(kāi)發(fā)人員在使用它的時(shí)候都出現(xiàn)了問(wèn)題,問(wèn)題比較多的就是它們的注冊(cè)順序總不是我們預(yù)期的,下面介紹一下正常的使用方法,感興趣的朋友一起看看吧2024-05-05

