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 :
-
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 -
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); }); -
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());