Maison > Java > javaDidacticiel > le corps du texte

Introduction aux appels asynchrones Springboot (avec code)

不言
Libérer: 2019-04-12 10:33:15
avant
3573 Les gens l'ont consulté

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);
       }
   }
Copier après la connexion

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";
       }
   }
Copier après la connexion

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);
       }
   }
Copier après la connexion

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);
    }
}
Copier après la connexion

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!

Étiquettes associées:
source:segmentfault.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal