ホームページ  >  記事  >  Java  >  springboot 非同期呼び出しの概要 (コード付き)

springboot 非同期呼び出しの概要 (コード付き)

不言
不言転載
2019-04-12 10:33:153542ブラウズ

この記事では、springboot の非同期呼び出しの概要 (コード付き) を紹介します。これには一定の参考価値があります。必要な友人は参照してください。お役に立てば幸いです。

同期

プログラムは、定義された順序で順次実行されます。プログラムの各行は、実行する前に、プログラムの前の行が完了するまで待機する必要があります。関数呼び出しが発行されても、結果が得られる前にプログラムの呼び出しは戻りません。

非同期

プログラムが順次実行される場合、非同期呼び出しステートメントが結果を返すのを待たずに後続のプログラムが実行されます。非同期プロシージャ呼び出しが発行された場合、呼び出し元はプロシージャ呼び出しステートメントを取得できません。すぐに結果が出る。

同期コード

サービス層:

public void test() throws InterruptedException {
       Thread.sleep(2000);
       for (int i = 0; i < 1000; i++) {
           System.out.println("i = " + i);
       }
   }

コントローラ層:

   @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. Print j ループ
  2. Print i ループ
  3. メイン スレッドの終了
非同期コード

サービス層のテストメソッドに

@Asyncアノテーションを追加し、同時にスタートアップクラスにを追加します。 @EnableAsyncAnnotation サービス層:

   @Async
   public void test() throws InterruptedException {
       Thread.sleep(2000);
       for (int i = 0; i < 1000; i++) {
           System.out.println("i = " + i);
       }
   }
Controller は変更されず、スタートアップ クラスが

@EnableAsync: ## で追加されます。 #<pre class="brush:php;toolbar:false">@SpringBootApplication @EnableAsync public class AsyncApplication {     public static void main(String[] args) {         SpringApplication.run(AsyncApplication.class, args);     } }</pre>次のように印刷シーケンスを再度要求します。

メイン スレッドの開始
  1. Print j ループ
  2. メイン スレッドの終了
  3. Print i ループ

以上がspringboot 非同期呼び出しの概要 (コード付き)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はsegmentfault.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。