springboot 異步調用的實現(xiàn)方法
說異步調用前,我們說說它對應的同步調用。通常開發(fā)過程中,一般上我們都是同步調用,即:程序按定義的順序依次執(zhí)行的過程,每一行代碼執(zhí)行過程必須等待上一行代碼執(zhí)行完畢后才執(zhí)行。而異步調用指:程序在執(zhí)行時,無需等待執(zhí)行的返回值可繼續(xù)執(zhí)行后面的代碼。顯而易見,同步有依賴相關性,而異步沒有,所以異步可并發(fā)執(zhí)行,可提高執(zhí)行效率,在相同的時間做更多的事情。
同步
程序按照定義順序依次執(zhí)行,每一行程序都必須等待上一行程序執(zhí)行完成之后才能執(zhí)行,就是在發(fā)出一個功能調用時,在沒有得到結果之前,該調用就不返回。
異步
程序在順序執(zhí)行時,不等待異步調用的語句返回結果就執(zhí)行后面的程序,當一個異步過程調用發(fā)出后,調用者不能立刻得到結果。
同步代碼
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("主線程結束"); return "async"; } catch (InterruptedException e) { e.printStackTrace(); return "fail"; } }
瀏覽器中請求 http://localhost:8080/test
控制臺打印順序:
- 主線程開始
- 打印j循環(huán)
- 打印i循環(huán)
- 主線程結束
異步代碼
在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)
- 主線程結束
- 打印i循環(huán)
代碼: async
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
SpringBoot擴展SpringMVC原理并實現(xiàn)全面接管
這篇文章主要介紹了SpringBoot擴展SpringMVC原理并實現(xiàn)全面接管,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-11-11java發(fā)送HttpClient請求及接收請求結果過程的簡單實例
下面小編就為大家?guī)硪黄猨ava發(fā)送HttpClient請求及接收請求結果過程的簡單實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-11-11阿里巴巴 Sentinel + InfluxDB + Chronograf 實現(xiàn)監(jiān)控大屏
這篇文章主要介紹了阿里巴巴 Sentinel + InfluxDB + Chronograf 實現(xiàn)監(jiān)控大屏,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2019-09-09java+SpringBoot設計實現(xiàn)評教系統(tǒng)
這篇文章主要介紹了用過Java SpringBoot實現(xiàn)一個簡單的評價系統(tǒng),可以做到學生管理、教師管理、評教管理、指標管理、課程管理等。感興趣的可以了解一下2021-12-12