Middle
Kam ir nepieciešams CompletableFuture Java?
sobes.tech AI
Atbilde no AI
CompletableFuture tiek izmantots asinhronai uzdevumu izpildei un asinhrono operāciju sastāvdaļu veidošanai. Tas pārstāv asinhronas operācijas rezultātu, kas var tikt pabeigts nākotnē.
Galvenās priekšrocības un iemesli tā izmantošanai:
- Asinhrona izpilde: ļauj veikt uzdevumus fonā, neblokējot galveno plūsmu.
- Asinhrono operāciju sastāvdaļu veidošana: dod iespēju saistīt vairākas asinhronas uzdevumus, noteikt, kā tie jāizpilda secīgi vai paralēli, un apstrādāt to rezultātus.
- Izņēmumu apstrāde: nodrošina mehānismus kļūdu apstrādei asinhronās uzdevumos.
- Elastīgums: atbalsta dažādas metodes rezultāta apstrādei (piemēram, funkcijas piemērošana, nākamā uzdevuma izpilde) un izpildes plūsmu noteikšanu.
Piemēri lietošanai:
-
Dažu neatkarīgu uzdevumu paralēla izpilde un to pabeigšanas gaidīšana:
// Piemērs divu uzdevumu paralēlai izpildei CompletableFuture<String> future1 = CompletableFuture.supplyAsync(() -> { // Ilga operācija 1 return "Rezultāts 1"; }); CompletableFuture<String> future2 = CompletableFuture.supplyAsync(() -> { // Ilga operācija 2 return "Rezultāts 2"; }); CompletableFuture<Void> combinedFuture = CompletableFuture.allOf(future1, future2); combinedFuture.join(); // Gaidīt abu uzdevumu pabeigšanu -
Seku asinhrono operāciju izpilde:
// Seku uzdevumu piemērs CompletableFuture<String> initialFuture = CompletableFuture.supplyAsync(() -> "Sākotnējā vērtība"); CompletableFuture<Integer> transformedFuture = initialFuture.thenApplyAsync(result -> { // Rezultāta pārveidošana return result.length(); }); transformedFuture.thenAccept(length -> { System.out.println("Rindas garums: " + length); }); -
Izņēmumu apstrāde:
// Izņēmumu apstrādes piemērs CompletableFuture<String> errorFuture = CompletableFuture.supplyAsync(() -> { if (true) { throw new RuntimeException("Radusies kļūda"); } return "Veiksme"; }).exceptionally(ex -> { System.err.println("Kļūdu apstrāde: " + ex.getMessage()); return "Apstrādāta kļūda"; // Rezerves vērtība }); System.out.println(errorFuture.join());