Middle
Waarvoor dient CompletableFuture in Java?
sobes.tech AI
Antwoord van AI
CompletableFuture wordt gebruikt voor het asynchroon uitvoeren van taken en het samenstellen van asynchrone operaties. Het vertegenwoordigt het resultaat van een asynchrone operatie die in de toekomst kan worden voltooid.
Belangrijkste voordelen en redenen om het te gebruiken:
- Asynchrone uitvoering: Maakt het mogelijk taken op de achtergrond uit te voeren zonder de hoofdthread te blokkeren.
- Samenstellen van asynchrone operaties: Maakt het mogelijk meerdere asynchrone taken te koppelen, te bepalen hoe ze sequentieel of parallel worden uitgevoerd, en hun resultaten te verwerken.
- Foutafhandeling: Biedt mechanismen voor het beheren van fouten in asynchrone taken.
- Flexibiliteit: Ondersteunt verschillende methoden voor het verwerken van het resultaat (bijvoorbeeld functies toepassen, de volgende taak uitvoeren) en het bepalen van de uitvoerthreads.
Voorbeelden van gebruik:
-
Uitvoeren van meerdere onafhankelijke taken parallel en wachten tot ze klaar zijn:
// Voorbeeld van parallel uitvoeren van twee taken CompletableFuture<String> future1 = CompletableFuture.supplyAsync(() -> { // Lange operatie 1 return "Resultaat 1"; }); CompletableFuture<String> future2 = CompletableFuture.supplyAsync(() -> { // Lange operatie 2 return "Resultaat 2"; }); CompletableFuture<Void> combinedFuture = CompletableFuture.allOf(future1, future2); combinedFuture.join(); // Wachten op beide taken -
Sequentiële asynchrone operaties:
// Voorbeeld van sequentiële uitvoering CompletableFuture<String> initialFuture = CompletableFuture.supplyAsync(() -> "Beginwaarde"); CompletableFuture<Integer> transformedFuture = initialFuture.thenApplyAsync(result -> { // Resultaat transformeren return result.length(); }); transformedFuture.thenAccept(length -> { System.out.println("Stringlengte: " + length); }); -
Foutafhandeling:
// Voorbeeld van foutafhandeling CompletableFuture<String> errorFuture = CompletableFuture.supplyAsync(() -> { if (true) { throw new RuntimeException("Er is een fout opgetreden"); } return "Succes"; }).exceptionally(ex -> { System.err.println("Foutafhandeling: " + ex.getMessage()); return "Afgehandelde fout"; // Reservewaarde }); System.out.println(errorFuture.join());