Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Apprendre Défi CompletableFuture | Meilleures Pratiques de Multithreading
Multithreading en Java
course content

Contenu du cours

Multithreading en Java

Multithreading en Java

1. Notions de Base du Multithreading
2. Collections Synchronisées
3. Mécanismes de Synchronisation de Haut Niveau
4. Meilleures Pratiques de Multithreading

book
Défi CompletableFuture

Tâche

Votre tâche consiste à construire un système qui gère les commandes et effectue des calculs supplémentaires comme les coûts de taxe et d'expédition. Vous devez traiter plusieurs commandes asynchrone, effectuer les calculs nécessaires, et afficher le montant total pour chaque commande une fois que tous les calculs sont terminés.

Chaque commande a un identifiant unique et un prix associé. (classe InitMap)

L'ID et leurs sommes sont stockés dans un Map au sein de la classe InitMap. Les clés de ce Map (qui sont les ID de commande) sont celles que nous parcourons dans la méthode processOrders().

La récupération des données de commande est effectuée asynchrone et retourne le montant de la commande. Cela est géré par la classe OrderService, en particulier la méthode fetchOrderAmount(String orderId).

La taxe est calculée à 15% du montant de la commande. Cela est géré par la classe CalculationService, en utilisant la méthode calculateTax().

Le coût d'expédition est calculé à 10% du montant de la commande. Cela est également géré par la classe CalculationService, en utilisant la méthode calculateShipping().

Note

Votre tâche principale est de mettre en œuvre la logique étape par étape dans la classe OrderProcessingExample du package task dans la méthode processOrders().

Étapes de mise en œuvre

1. Recevez le montant de la commande de manière asynchrone en utilisant le service de commande :

  • Créez un objet CompletableFuture pour récupérer le montant de la commande asynchrone ;
  • Appelez la méthode fetchOrderAmount() de OrderService en passant l'id de la commande.

Remarque

La méthode fetchOrderAmount() utilise CompletableFuture.supplyAsync() pour effectuer la tâche de manière asynchrone et retourne le montant de la commande, par son id.

2. Après avoir récupéré le montant de la commande, calculez de manière asynchrone la taxe en utilisant le service de calcul :

  • Utilisez thenCompose() pour exécuter la tâche séquentiellement après avoir obtenu le montant de la commande. Appelez la méthode calculateTax() de CalculationService en passant le montant de la commande.

Remarque

La méthode calculateTax() utilise CompletableFuture.supplyAsync() pour exécuter la tâche de manière asynchrone et retourne une taxe égale à 15% du montant de la commande.

3. Après avoir reçu le montant de la commande, calculez de manière asynchrone le coût d'expédition en utilisant le service de calcul :

  • Utilisez thenCompose() pour exécuter la tâche séquentiellement après avoir reçu le montant de la commande. Appelez la méthode calculateShipping de CalculationService en passant le montant de la commande.

Remarque

La méthode calculateShipping() utilise CompletableFuture.supplyAsync() pour exécuter la tâche de manière asynchrone et retourne un coût d'expédition égal à 10% du montant de la commande.

4. Combinez les calculs asynchrones de la taxe et du coût d'expédition pour obtenir le coût total supplémentaire :

  • Utilisez thenCombine() pour combiner deux résultats CompletableFuture de taxe et d'expédition pour obtenir le coût supplémentaire total (taxe + coût d'expédition).

5. Combinez le montant de la commande et le coût supplémentaire total pour obtenir le montant total de la commande :

  • Utilisez thenCombine() pour combiner les deux résultats CompletableFuture du coût supplémentaire et du coût supplémentaire total et du montant total de la commande pour obtenir le montant total de la commande.

6. Après avoir calculé le total, affichez-le sur la console :

  • Utilisez thenAccept() pour traiter et afficher le résultat ;
  • Après avoir terminé tous les calculs, affichez le total de la commande sur la console.

Pour afficher le résultat sur la console, vous pouvez utiliser ce modèle :

Si vous suivez tout correctement, vous obtiendrez ce résultat dans la console :

Une fois que vous êtes sûr que tout fonctionne, exécutez les tests de vérification sur le chemin /src/test/java/OrderProcessingExampleTest.java.

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 4. Chapitre 7
We're sorry to hear that something went wrong. What happened?
some-alt