Middle
Java-ში CompletableFuture-ს რა საჭიროა?
sobes.tech AI
პასუხი AI-სგან
CompletableFuture გამოიყენება ასინქრონული დავალებების შესრულებისა და ასინქრონული ოპერაციების კომპოზიციისთვის. ის წარმოადგენს ასინქრონული ოპერაციის შედეგს, რომელიც შეიძლება დასრულდეს მომავალში:
ძირითადი უპირატესობები და გამოყენების მიზეზები:
- ასინქრონული შესრულება: საშუალებას აძლევს დავალებების შესრულებას ფონის რეჟიმში, ძირითადი ნაკადის დაბლოკვის გარეშე.
- ასინქრონული ოპერაციების კომპოზიცია: იძლევა შესაძლებლობას დაკავშიროს რამდენიმე ასინქრონული დავალება, განსაზღვროს როგორ უნდა შესრულდეს ისინი თანმიმდევრობით ან პარალელურად, და პროცესორ შედეგებს.
- შეცდომების დამუშავება: უზრუნველყოფს მექანიზმებს შეცდომების დამუშავებისთვის ასინქრონული დავალებების დროს.
- სხვადასხვა მეთოდების მხარდაჭერა: შედეგის დამუშავებისთვის (მაგ., ფუნქციის გამოყენება, შემდეგი დავალების შესრულება) და შესრულების ნაკადების განსაზღვრისთვის.
გამოყენების მაგალითები:
-
რამდენიმე დამოუკიდებელი დავალების პარალელურად შესრულება და მათი დასრულების მოლოდინი:
// ორი დავალების პარალელური შესრულების მაგალითი CompletableFuture<String> future1 = CompletableFuture.supplyAsync(() -> { // ხანგრძლივი ოპერაცია 1 return "შედეგი 1"; }); CompletableFuture<String> future2 = CompletableFuture.supplyAsync(() -> { // ხანგრძლივი ოპერაცია 2 return "შედეგი 2"; }); CompletableFuture<Void> combinedFuture = CompletableFuture.allOf(future1, future2); combinedFuture.join(); // ორივე დავალების დასრულების მოლოდინი -
თანმიმდევრობით ასინქრონული ოპერაციების შესრულება:
// მაგალითი თანმიმდევრობით შესრულებული დავალებების CompletableFuture<String> initialFuture = CompletableFuture.supplyAsync(() -> "საწყისი მნიშვნელობა"); CompletableFuture<Integer> transformedFuture = initialFuture.thenApplyAsync(result -> { // შედეგის გარდაქმნა return result.length(); }); transformedFuture.thenAccept(length -> { System.out.println("სტრინგის სიგრძე: " + length); }); -
შეცდომების დამუშავება:
// შეცდომების დამუშავების მაგალითი CompletableFuture<String> errorFuture = CompletableFuture.supplyAsync(() -> { if (true) { throw new RuntimeException("შეცდომა მოხდა"); } return "წარმატება"; }).exceptionally(ex -> { System.err.println("შეცდომის დამუშავება: " + ex.getMessage()); return "დამუშავებული შეცდომა"; // ჩანაცვლებითი მნიშვნელობა }); System.out.println(errorFuture.join());