這篇文章帶給大家的內容是關於springboot非同步呼叫的介紹(附程式碼),有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。
同步
程式依照定義順序依序執行,每一行程式都必須等待上一行程式執行完成之後才能執行,就是在發出一個功能呼叫時,在沒有得到結果之前,該調用就不返回。
非同步
程式在順序執行時,不等待非同步呼叫的語句返回結果就執行後面的程式,當一個非同步過程呼叫發出後,呼叫者不能立刻得到結果。
同步程式碼
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
控制台列印順序:
在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); } }
再次要求列印順序如下:
以上是springboot非同步呼叫的介紹(附程式碼)的詳細內容。更多資訊請關注PHP中文網其他相關文章!