首頁  >  文章  >  Java  >  springboot非同步呼叫的介紹(附程式碼)

springboot非同步呼叫的介紹(附程式碼)

不言
不言轉載
2019-04-12 10:33:153543瀏覽

這篇文章帶給大家的內容是關於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
控制台列印順序:

  1. 主執行緒開始
  2. 列印j循環
  3. 列印i循環
  4. 主執行緒結束

非同步程式碼

在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);
    }
}

再次要求列印順序如下:

  1. 主執行緒開始
  2. 列印j迴圈
  3. 主執行緒結束
  4. 列印i迴圈

以上是springboot非同步呼叫的介紹(附程式碼)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:segmentfault.com。如有侵權,請聯絡admin@php.cn刪除