Sobes.tech
Middle

À quoi sert CompletableFuture en Java?

sobes.tech IA

Réponse de l'IA

CompletableFuture est utilisé pour l'exécution asynchrone de tâches et la composition d'opérations asynchrones. Il représente le résultat d'une opération asynchrone qui peut être complété à l'avenir.

Les principaux avantages et raisons de l'utiliser :

  • Exécution asynchrone : Permet d'exécuter des tâches en arrière-plan sans bloquer le fil principal.
  • Composition d'opérations asynchrones : Permet de chaîner plusieurs tâches asynchrones, en définissant comment elles doivent s'exécuter séquentiellement ou en parallèle, et de traiter leurs résultats.
  • Gestion des exceptions : Fournit des mécanismes pour gérer les erreurs dans les tâches asynchrones.
  • Flexibilité : Supporte différentes méthodes pour traiter le résultat (par exemple, appliquer une fonction, exécuter la tâche suivante) et définir les threads d'exécution.

Exemples d'utilisation :

  1. Exécuter plusieurs tâches indépendantes en parallèle et attendre leur achèvement :

    // Exemple d'exécution parallèle de deux tâches
    CompletableFuture<String> future1 = CompletableFuture.supplyAsync(() -> {
        // Opération longue 1
        return "Résultat 1";
    });
    
    CompletableFuture<String> future2 = CompletableFuture.supplyAsync(() -> {
        // Opération longue 2
        return "Résultat 2";
    });
    
    CompletableFuture<Void> combinedFuture = CompletableFuture.allOf(future1, future2);
    
    combinedFuture.join(); // Attendre la fin des deux tâches
    
  2. Exécuter des opérations asynchrones séquentielles :

    // Exemple d'exécution séquentielle de tâches
    CompletableFuture<String> initialFuture = CompletableFuture.supplyAsync(() -> "Valeur initiale");
    
    CompletableFuture<Integer> transformedFuture = initialFuture.thenApplyAsync(result -> {
        // Transformation du résultat
        return result.length();
    });
    
    transformedFuture.thenAccept(length -> {
        System.out.println("Longueur de la chaîne : " + length);
    });
    
  3. Gestion des exceptions :

    // Exemple de gestion d'exception
    CompletableFuture<String> errorFuture = CompletableFuture.supplyAsync(() -> {
        if (true) {
            throw new RuntimeException("Une erreur est survenue");
        }
        return "Succès";
    }).exceptionally(ex -> {
        System.err.println("Gestion de l'erreur : " + ex.getMessage());
        return "Erreur traitée"; // Valeur de secours
    });
    
    System.out.println(errorFuture.join());