Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lernen Herausforderung CompletableFuture | Best Practices für Multithreading
Multithreading in Java
course content

Kursinhalt

Multithreading in Java

Multithreading in Java

1. Grundlagen der Multithread-Verarbeitung
2. Synchronisierte Sammlungen
3. Hochrangige Synchronisationsmechanismen
4. Best Practices für Multithreading

book
Herausforderung CompletableFuture

Aufgabe

Ihre Aufgabe ist es, ein System zu entwickeln, das Bestellungen bearbeitet und zusätzliche Berechnungen wie Steuer- und Versandkosten durchführt. Sie müssen mehrere Bestellungen asynchron verarbeiten, die notwendigen Berechnungen durchführen und den Gesamtbetrag für jede Bestellung anzeigen, sobald alle Berechnungen abgeschlossen sind.

Jede Bestellung hat eine eindeutige Kennung und einen Preis, der damit verbunden ist. (InitMap Klasse)

Die ID und ihre Summen werden in einer Map innerhalb der InitMap Klasse gespeichert. Die Schlüssel dieser Map (die die Bestell-ID sind) sind diejenigen, durch die wir in der processOrders() Methode schleifen.

Das Abrufen von Bestelldaten erfolgt asynchron und gibt den Bestellbetrag zurück. Dies wird von der OrderService Klasse gehandhabt, insbesondere von der fetchOrderAmount(String orderId) Methode.

Steuern werden als 15% des Bestellbetrags berechnet. Dies wird von der CalculationService Klasse verwaltet, die die calculateTax() Methode verwendet.

Die Versandkosten werden als 10% des Bestellbetrags berechnet. Dies wird ebenfalls von der CalculationService Klasse gehandhabt, die die calculateShipping() Methode verwendet.

Hinweis

Ihre Hauptaufgabe besteht darin, die Logik Schritt für Schritt im Paket task Klasse OrderProcessingExample in der processOrders() Methode zu implementieren.

Implementierungsschritte

1. Empfangen Sie den Bestellbetrag asynchron über den Bestellservice:

  • Erstellen Sie ein CompletableFuture-Objekt, um den Bestellbetrag asynchron abzurufen;
  • Rufen Sie die Methode fetchOrderAmount() von OrderService auf und übergeben Sie die Bestell-ID.

Hinweis

Die Methode fetchOrderAmount() verwendet CompletableFuture.supplyAsync(), um die Aufgabe asynchron auszuführen und gibt den Bestellbetrag anhand seiner ID zurück.

2. Berechnen Sie nach dem Abrufen des Bestellbetrags asynchron die Steuer mit dem Berechnungsservice:

  • Verwenden Sie thenCompose(), um die Aufgabe sequentiell nach Erhalt des Bestellbetrags auszuführen. Rufen Sie die Methode calculateTax() von CalculationService auf und übergeben Sie den Bestellbetrag.

Hinweis

Die Methode calculateTax() verwendet CompletableFuture.supplyAsync(), um die Aufgabe asynchron auszuführen und gibt eine Steuer in Höhe von 15% des Bestellbetrags zurück.

3. Berechnen Sie nach dem Erhalt des Bestellbetrags asynchron die Versandkosten mit dem Berechnungsservice:

  • Verwenden Sie thenCompose(), um die Aufgabe sequentiell nach Erhalt des Bestellbetrags auszuführen. Rufen Sie die Methode calculateShipping von CalculationService auf und übergeben Sie den Bestellbetrag.

Hinweis

Die Methode calculateShipping() verwendet CompletableFuture.supplyAsync(), um die Aufgabe asynchron auszuführen und gibt Versandkosten in Höhe von 10% des Bestellbetrags zurück.

4. Kombinieren Sie die asynchronen Steuer- und Versandkostenberechnungen, um die gesamten zusätzlichen Kosten zu erhalten:

  • Verwenden Sie thenCombine(), um zwei CompletableFuture-Ergebnisse von Steuer und Versand zu kombinieren, um die gesamten zusätzlichen Kosten (Steuer + Versandkosten) zu erhalten.

5. Kombinieren Sie den Bestellbetrag und die gesamten zusätzlichen Kosten, um den gesamten Bestellbetrag zu erhalten:

  • Verwenden Sie thenCombine(), um die beiden CompletableFuture-Ergebnisse der zusätzlichen Kosten und der gesamten zusätzlichen Kosten und des gesamten Bestellbetrags zu kombinieren, um den gesamten Bestellbetrag zu erhalten.

6. Geben Sie nach der Berechnung des Gesamtergebnisses dieses auf der Konsole aus:

  • Verwenden Sie thenAccept(), um das Ergebnis zu verarbeiten und auszugeben;
  • Geben Sie nach Abschluss aller Berechnungen das Bestellgesamtergebnis auf der Konsole aus.

Um das Ergebnis auf der Konsole auszugeben, können Sie dieses Muster verwenden:

Wenn Sie alles korrekt befolgen, erhalten Sie diese Ausgabe in der Konsole:

Sobald Sie sicher sind, dass alles funktioniert, führen Sie die Verifikationstests auf dem Pfad /src/test/java/OrderProcessingExampleTest.java aus.

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

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