Middle
Mis on CompletableFuture?
sobes.tech AI
Vastus AI-lt
CompletableFuture Java 8+ laiendab Future mudelit, lisades võimalused asünkroonseks programmeerimiseks ja ülesannete koostamiseks.
See rakendab CompletionStage ja Future liideseid. CompletionStage määratleb lepingu asünkroonseks täitmiseks ja arvutusetappide koostamiseks.
Peamised omadused:
- Mitte-blokeerivad operatsioonid: võimaldavad ülesandeid täita asünkroonselt, mitte blokeerides peamist täitmisvoogu.
- Koostamine: pakub rico API tulemuste ühendamiseks ja mitme asünkroonse operatsiooni ühendamiseks.
- Vigade käsitlemine: sisseehitatud mehhanismid vigade haldamiseks asünkroonsetes voogudes.
- Loomine: saab luua lõpetatud, mitte-lõpetatud või vigase
CompletableFuture. - Sõltuvused: võimaldab luua sõltuvuste ahelad, kus ühe täitmine sõltub teise lõpetamisest.
- Paralleelne täitmine: meetodid
allOfjaanyOfmitme ülesande paralleelseks täitmiseks.
Kasutusnäited:
-
Loomine ja lõpetamine:
// Lõpetatud `CompletableFuture` loomine CompletableFuture<String> completedFuture = CompletableFuture.completedFuture("Hello"); // Mitte-lõpetatud `CompletableFuture` loomine ja selle hilisem lõpetamine CompletableFuture<String> future = new CompletableFuture<>(); // ... asünkroonse töö tegemine ... future.complete("Done"); // Või vea korral // future.completeExceptionally(new RuntimeException("Error")); -
Asünkroonse ülesande täitmine:
CompletableFuture<String> asyncFuture = CompletableFuture.supplyAsync(() -> { // Asünkroonne töö (nt faili lugemine, võrgupäring) try { Thread.sleep(1000); } catch (InterruptedException e) { throw new IllegalStateException(e); } return "Async Result"; }); -
Koostamine
thenApply-ga:CompletableFuture<Integer> result = CompletableFuture.supplyAsync(() -> 10) .thenApply(x -> x * 2); // Eelmise sammu tulemus antakse funktsioonile -
Koostamine
thenCombine-ga:CompletableFuture<Integer> future1 = CompletableFuture.supplyAsync(() -> 10); CompletableFuture<Integer> future2 = CompletableFuture.supplyAsync(() -> 20); CompletableFuture<Integer> combinedFuture = future1.thenCombine(future2, (res1, res2) -> res1 + res2); // Kaks CompletableFuture'i tulemuste ühendamine -
Lõpetamise töötlemine
thenAccept-iga:CompletableFuture.supplyAsync(() -> "Final result") .thenAccept(result -> System.out.println("Ülesanne lõppes tulemusega: " + result)); // Tegevuse täitmine pärast lõpetamist ilma väärtust tagastamata -
Vigade töötlemine
exceptionally-ga:CompletableFuture<String> futureWithException = CompletableFuture.supplyAsync(() -> { throw new RuntimeException("Something went wrong"); }).exceptionally(ex -> { System.err.println("Viga juhtus: " + ex.getMessage()); return "Default Value"; // Vaikeväärtus vea korral });
CompletableFuture lihtsustab oluliselt asünkroonse ja mitte-blokeeriva koodi kirjutamist Java-s, muutes selle kergemini loetavaks ja hooldatavaks võrreldes traditsiooniliste callback-ide või blokeerivate Future.get()-kutsungitega.