რა არის CompletableFuture?
sobes.tech AI
პასუხი AI-სგან
CompletableFuture Java 8+-ში Future მოდელის გაფართოებაა, რომელიც აძლიერებს ასინქრონული პროგრამირების და დავალებების კომპოზიციის შესაძლებლობებს.
იგი ახორციელებს CompletionStage და Future ინტერფეისებს. CompletionStage განსაზღვრავს კონტრაქტს ასინქრონული გამ executing და კომპოზიციისთვის.
ძირითადი მახასიათებლები:
- ნებროკინგ ოპერაციები: საშუალებას აძლევს დავალებების ასინქრონულად შესრულებას, არ ბლოკავს მთავარი ნაკადის მუშაობას.
- კომპოზიცია: უზრუნველყოფს rico API-ს შედეგების დაკავშირებისა და გაერთიანებისთვის მრავალი ასინქრონული ოპერაციის.
- შეცდომების მართვა: ინტეგრირებული მექანიზმები შეცდომების მართვისთვის ასინქრონულ ნაკადებში.
- შექმნა: შესაძლებელია შექმნათ დასრულებული, არასრულყოფილი ან შეცდომიანი
CompletableFuture. - მოკიდებულებები: საშუალებას აძლევს შექმნათ დამოკიდებული დავალებების ჯაჭვები, სადაც ერთი შესრულება დამოკიდებულია მეორე დასრულებაზე.
- პარალელური შესრულება: მეთოდები
allOfდაanyOfმრავალი დავალების პარალელურად შესრულებისთვის.
გამოყენების მაგალითები:
-
შექმნა და დასრულება:
// დასრულებული CompletableFuture-ის შექმნა CompletableFuture<String> completedFuture = CompletableFuture.completedFuture("Hello"); // არასრულყოფილი CompletableFuture-ის შექმნა და მისი მოგვიანებით დასრულება CompletableFuture<String> future = new CompletableFuture<>(); // ... ასინქრონული სამუშაოს შესრულება ... future.complete("Done"); // ან შეცდომის შემთხვევაში // future.completeExceptionally(new RuntimeException("Error")); -
ასინქრონული დავალების შესრულება:
CompletableFuture<String> asyncFuture = CompletableFuture.supplyAsync(() -> { // ასინქრონული სამუშაო (მაგალითად, ფაილის წაკითხვა, ქსელის მოთხოვნა) try { Thread.sleep(1000); } catch (InterruptedException e) { throw new IllegalStateException(e); } return "Async Result"; }); -
კომპოზიცია
thenApply-თან:CompletableFuture<Integer> result = CompletableFuture.supplyAsync(() -> 10) .thenApply(x -> x * 2); // შედეგი წინამორბედი ნაბიჯის ფუნქციაში -
კომპოზიცია
thenCombine-თან:CompletableFuture<Integer> future1 = CompletableFuture.supplyAsync(() -> 10); CompletableFuture<Integer> future2 = CompletableFuture.supplyAsync(() -> 20); CompletableFuture<Integer> combinedFuture = future1.thenCombine(future2, (res1, res2) -> res1 + res2); // ორი CompletableFuture-ის შედეგების გაერთიანება -
დასრულების დამუშავება
thenAccept-ით:CompletableFuture.supplyAsync(() -> "Final result") .thenAccept(result -> System.out.println("Task finished with result: " + result)); // მოქმედების შესრულება დასრულების შემდეგ, მნიშვნელობის დაბრუნების გარეშე -
შეცდომების დამუშავება
exceptionally-ით:CompletableFuture<String> futureWithException = CompletableFuture.supplyAsync(() -> { throw new RuntimeException("Something went wrong"); }).exceptionally(ex -> { System.err.println("Error occurred: " + ex.getMessage()); return "Default Value"; // მნიშვნელობის დაბრუნება შეცდომის დროს });
CompletableFuture მნიშვნელოვნად ამარტივებს ასინქრონული და ნებროკინგი კოდის დაწერას Java-ში, რაც მას უფრო ადვილად წასაკითხს და შენარჩუნებადს ხდის, ვიდრე ტრადიციული callback-ები ან ბლოკირებადი Future.get()-ის გამოძახებები.