Maison  >  Article  >  Java  >  Introduction aux appels asynchrones Springboot (avec code)

Introduction aux appels asynchrones Springboot (avec code)

不言
不言avant
2019-04-12 10:33:153543parcourir

Cet article vous présente une introduction aux appels asynchrones Springboot (avec code). Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. J'espère qu'il vous sera utile.

Synchronisation

Les programmes sont exécutés séquentiellement dans l'ordre défini. Chaque ligne du programme doit attendre la fin de la ligne de programme précédente avant de pouvoir être exécutée. L'appel de fonction est émis, avant que le résultat ne soit obtenu, le programme L'appel ne revient pas.

Asynchrone

Lorsque le programme est exécuté séquentiellement, le programme suivant est exécuté sans attendre que l'instruction d'appel asynchrone renvoie le résultat. Lorsqu'un appel de procédure asynchrone est émis, l'appelant ne peut pas obtenir le résultat. résultat immédiatement.

Code de synchronisation

Couche service :

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

Couche contrôleur :

   @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";
       }
   }

Demande dans le navigateurhttp://localhost:8080/test
Ordre d'impression de la console :

  1. Le fil principal démarre
  2. Imprimer la boucle j
  3. Imprimer la boucle i
  4. Le fil principal se termine

Asynchrone code

Ajouter l'annotation @Async à la méthode de test de la couche Service. En même temps, afin que l'asynchrone prenne effet, ajoutez l'annotation @EnableAsync à la classe de démarrage
Couche Service :

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

Le contrôleur reste inchangé, et la classe de démarrage est ajoutée avec @EnableAsync :

@SpringBootApplication
@EnableAsync
public class AsyncApplication {
    public static void main(String[] args) {
        SpringApplication.run(AsyncApplication.class, args);
    }
}

Demandez à nouveau la séquence d'impression comme suit :

  1. Le fil principal commence
  2. Print j Loop
  3. Le fil principal se termine
  4. Print i Loop

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer