Middle
CompletableFuture чист?
sobes.tech AI
Ҷавоб аз AI
CompletableFuture дар Java 8+ моделро васеъ мекунад, ки имкониятҳои барномасозии асинхронӣ ва таркиби вазифаҳоро илова мекунад.
Он интерфейсҳои CompletionStage ва Future-ро амалӣ мекунад. CompletionStage шартнома барои иҷрои асинхронӣ ва таркиби қадамҳои ҳисобро муайян мекунад.
Хусусиятҳои асосӣ:
- Оператсияҳои бе блок: Имкон медиҳад вазифаҳоро асинхронӣ иҷро кардан, бидуни блок кардани ҷараёни асосӣ.
- Таркиб: API бой барои пайваст кардан ва якҷоя кардани натиҷаҳои чандин амалҳои асинхронӣ.
- Идоракунии истисноҳо: Механизмҳои дарунсохт барои кор бо хатоҳо дар ҷараёнҳои асинхронӣ.
- Эҷод: Шумо метавонед
CompletableFuture-ҳои тамомшуда, номукамкам ва ё хато дошта эҷод кунед. - Васлҳо: Имкон медиҳад сохтани занҷирҳои вазифаҳои вобаста, ки иҷрои яке аз анҷоми дигар вобаста аст.
- Иҷрои параллел: Методҳо ба монанди
allOfваanyOfбарои иҷрои параллелии чанд вазифа.
Маслиҳатҳои истифода:
-
Эҷод ва тамом кардан:
// Эҷоди `CompletableFuture` тамомшуда CompletableFuture<String> completedFuture = CompletableFuture.completedFuture("Салом"); // Эҷоди `CompletableFuture` номукаммалу ва тамом кардани он баъдан CompletableFuture<String> future = new CompletableFuture<>(); // ... иҷрои кори асинхронӣ ... future.complete("Тамом шуд"); // Ё дар ҳолати хато // future.completeExceptionally(new RuntimeException("Хатогӣ")); -
Иҷрои вазифаи асинхронӣ:
CompletableFuture<String> asyncFuture = CompletableFuture.supplyAsync(() -> { // Корҳои асинхронӣ (масалан, хондан аз файл, дархости шабакавӣ) try { Thread.sleep(1000); } catch (InterruptedException e) { throw new IllegalStateException(e); } return "Натиҷаи асинхронӣ"; }); -
Таркиб бо
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(() -> "Натиҷаи ниҳоӣ") .thenAccept(result -> System.out.println("Задача бо натиҷа тамом шуд: " + result)); // Иҷрои амал пас аз тамом шудан бе баргардонидани арзиш -
Идоракунии истисноҳо бо
exceptionally:CompletableFuture<String> futureWithException = CompletableFuture.supplyAsync(() -> { throw new RuntimeException("Нешто нодуруст шуд"); }).exceptionally(ex -> { System.err.println("Хатое рӯй дод: " + ex.getMessage()); return "Арзиши пешфарз"; // Баргардонидани арзиши пешфарз дар ҳолати хато });
CompletableFuture ба таври назаррас навиштани коди асинхронӣ ва бе блокро дар Java содда мекунад, онро хонданӣ ва нигоҳдории осонтар мекунад, нисбат ба callback-ҳои анъанавӣ ё даъватҳои блоки Future.get().