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

