Sobes.tech
Middle

CompletableFuture чист?

sobes.tech AI

Ҷавоб аз AI

CompletableFuture дар Java 8+ моделро васеъ мекунад, ки имкониятҳои барномасозии асинхронӣ ва таркиби вазифаҳоро илова мекунад.

Он интерфейсҳои CompletionStage ва Future-ро амалӣ мекунад. CompletionStage шартнома барои иҷрои асинхронӣ ва таркиби қадамҳои ҳисобро муайян мекунад.

Хусусиятҳои асосӣ:

  • Оператсияҳои бе блок: Имкон медиҳад вазифаҳоро асинхронӣ иҷро кардан, бидуни блок кардани ҷараёни асосӣ.
  • Таркиб: API бой барои пайваст кардан ва якҷоя кардани натиҷаҳои чандин амалҳои асинхронӣ.
  • Идоракунии истисноҳо: Механизмҳои дарунсохт барои кор бо хатоҳо дар ҷараёнҳои асинхронӣ.
  • Эҷод: Шумо метавонед CompletableFuture-ҳои тамомшуда, номукамкам ва ё хато дошта эҷод кунед.
  • Васлҳо: Имкон медиҳад сохтани занҷирҳои вазифаҳои вобаста, ки иҷрои яке аз анҷоми дигар вобаста аст.
  • Иҷрои параллел: Методҳо ба монанди allOf ва anyOf барои иҷрои параллелии чанд вазифа.

Маслиҳатҳои истифода:

  1. Эҷод ва тамом кардан:

    // Эҷоди `CompletableFuture` тамомшуда
    CompletableFuture<String> completedFuture = CompletableFuture.completedFuture("Салом");
    
    // Эҷоди `CompletableFuture` номукаммалу ва тамом кардани он баъдан
    CompletableFuture<String> future = new CompletableFuture<>();
    // ... иҷрои кори асинхронӣ ...
    future.complete("Тамом шуд");
    // Ё дар ҳолати хато
    // future.completeExceptionally(new RuntimeException("Хатогӣ"));
    
  2. Иҷрои вазифаи асинхронӣ:

    CompletableFuture<String> asyncFuture = CompletableFuture.supplyAsync(() -> {
        // Корҳои асинхронӣ (масалан, хондан аз файл, дархости шабакавӣ)
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            throw new IllegalStateException(e);
        }
        return "Натиҷаи асинхронӣ";
    });
    
  3. Таркиб бо thenApply:

    CompletableFuture<Integer> result = CompletableFuture.supplyAsync(() -> 10)
        .thenApply(x -> x * 2); // Натиҷаи қадами гузашта ба функсия дода мешавад
    
  4. Таркиб бо thenCombine:

    CompletableFuture<Integer> future1 = CompletableFuture.supplyAsync(() -> 10);
    CompletableFuture<Integer> future2 = CompletableFuture.supplyAsync(() -> 20);
    
    CompletableFuture<Integer> combinedFuture = future1.thenCombine(future2, (res1, res2) -> res1 + res2); // Ҳамҷоя кардани натиҷаҳои ду `CompletableFuture`
    
  5. Тамомшавӣ бо thenAccept:

    CompletableFuture.supplyAsync(() -> "Натиҷаи ниҳоӣ")
        .thenAccept(result -> System.out.println("Задача бо натиҷа тамом шуд: " + result)); // Иҷрои амал пас аз тамом шудан бе баргардонидани арзиш
    
  6. Идоракунии истисноҳо бо exceptionally:

    CompletableFuture<String> futureWithException = CompletableFuture.supplyAsync(() -> {
        throw new RuntimeException("Нешто нодуруст шуд");
    }).exceptionally(ex -> {
        System.err.println("Хатое рӯй дод: " + ex.getMessage());
        return "Арзиши пешфарз"; // Баргардонидани арзиши пешфарз дар ҳолати хато
    });
    

CompletableFuture ба таври назаррас навиштани коди асинхронӣ ва бе блокро дар Java содда мекунад, онро хонданӣ ва нигоҳдории осонтар мекунад, нисбат ба callback-ҳои анъанавӣ ё даъватҳои блоки Future.get().