springboot 異步調(diào)用的實(shí)現(xiàn)方法
說異步調(diào)用前,我們說說它對(duì)應(yīng)的同步調(diào)用。通常開發(fā)過程中,一般上我們都是同步調(diào)用,即:程序按定義的順序依次執(zhí)行的過程,每一行代碼執(zhí)行過程必須等待上一行代碼執(zhí)行完畢后才執(zhí)行。而異步調(diào)用指:程序在執(zhí)行時(shí),無(wú)需等待執(zhí)行的返回值可繼續(xù)執(zhí)行后面的代碼。顯而易見,同步有依賴相關(guān)性,而異步?jīng)]有,所以異步可并發(fā)執(zhí)行,可提高執(zhí)行效率,在相同的時(shí)間做更多的事情。
同步
程序按照定義順序依次執(zhí)行,每一行程序都必須等待上一行程序執(zhí)行完成之后才能執(zhí)行,就是在發(fā)出一個(gè)功能調(diào)用時(shí),在沒有得到結(jié)果之前,該調(diào)用就不返回。
異步
程序在順序執(zhí)行時(shí),不等待異步調(diào)用的語(yǔ)句返回結(jié)果就執(zhí)行后面的程序,當(dāng)一個(gè)異步過程調(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"; } }
瀏覽器中請(qǐng)求 http://localhost:8080/test
控制臺(tá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)求打印順序如下:
- 主線程開始
- 打印j循環(huán)
- 主線程結(jié)束
- 打印i循環(huán)
代碼: async
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- SpringBoot實(shí)現(xiàn)定時(shí)任務(wù)和異步調(diào)用
- SpringBoot開啟異步調(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擴(kuò)展SpringMVC原理并實(shí)現(xiàn)全面接管
這篇文章主要介紹了SpringBoot擴(kuò)展SpringMVC原理并實(shí)現(xiàn)全面接管,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11Java日期時(shí)間字符串和毫秒相互轉(zhuǎn)換的方法
這篇文章主要為大家詳細(xì)介紹了Java日期時(shí)間字符串和毫秒相互轉(zhuǎn)換的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-12-12Spring Boot啟動(dòng)banner定制的步驟詳解
這篇文章主要給大家介紹了關(guān)于Spring Boot啟動(dòng)banner定制的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2018-03-03Java設(shè)計(jì)模式之裝飾者模式詳解和代碼實(shí)例
這篇文章主要介紹了Java設(shè)計(jì)模式之裝飾者模式詳解和代碼實(shí)例,Decorator模式(別名Wrapper):動(dòng)態(tài)將職責(zé)附加到對(duì)象上,若要擴(kuò)展功能,裝飾者提供了比繼承更具彈性的代替方案,需要的朋友可以參考下2014-09-09java發(fā)送HttpClient請(qǐng)求及接收請(qǐng)求結(jié)果過程的簡(jiǎn)單實(shí)例
下面小編就為大家?guī)?lái)一篇java發(fā)送HttpClient請(qǐng)求及接收請(qǐng)求結(jié)果過程的簡(jiǎn)單實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧2016-11-11阿里巴巴 Sentinel + InfluxDB + Chronograf 實(shí)現(xiàn)監(jiān)控大屏
這篇文章主要介紹了阿里巴巴 Sentinel + InfluxDB + Chronograf 實(shí)現(xiàn)監(jiān)控大屏,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-09-09java+SpringBoot設(shè)計(jì)實(shí)現(xiàn)評(píng)教系統(tǒng)
這篇文章主要介紹了用過Java SpringBoot實(shí)現(xiàn)一個(gè)簡(jiǎn)單的評(píng)價(jià)系統(tǒng),可以做到學(xué)生管理、教師管理、評(píng)教管理、指標(biāo)管理、課程管理等。感興趣的可以了解一下2021-12-12java編程實(shí)現(xiàn)楊輝三角兩種輸出結(jié)果實(shí)例代碼
這篇文章主要介紹了java編程實(shí)現(xiàn)楊輝三角兩種輸出結(jié)果實(shí)例代碼,具有一定借鑒價(jià)值,需要的朋友可以參考下。2017-12-12