Sobes.tech
Middle

Javaда CompletableFuture эмне үчүн керек?

sobes.tech AI

AIден жооп

CompletableFuture колдонулат асинхрондуу тапшырмаларды ишке ашыруу жана асинхрондук операцияларды түзүү үчүн. Ал — бул болочокто аяктоо мүмкүнчүлүгү бар асинхрондук операциянын жыйынтыгы.

Негизги артыкчылыктары жана колдонуу себептери:

  • Асинхрондуу ишке ашыруу: Тапшырмаларды негизги агымга тоскоолдук кылбай, артында ишке ашыруу мүмкүнчүлүгүн берет.
  • Асинхрондук операцияларды түзүү: Бир нече асинхрондук тапшырмаларды байланыштырып, алардын кандайча аткарыларын белгилөө жана натыйжаларын иштетүү мүмкүнчүлүгүн берет.
  • Ката иштетүү: Асинхрондук тапшырмаларда ката кетирүү механизмдерин камсыз кылат.
  • Ийкемдүүлүк: Натыйжаны иштетүү үчүн ар кандай ыкмаларды колдоо (мисалы, функцияны колдонуу, кийинки тапшырманы аткаруу) жана аткаруу агымдарын аныктоо.

Колдонуу мисалдары:

  1. Бир нече көз карандысыз тапшырмаларды параллелдүү иштетүү жана алардын аяктоо күтүүсү:

    // Эки тапшырманын параллелдүү иштөө мисалы
    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(); // Эки тапшырманын аяктоосун күтүү
    
  2. Тиз арада асинхрондук операцияларды аткаруу:

    // Тиз арада тапшырмаларды аткаруу мисалы
    CompletableFuture<String> initialFuture = CompletableFuture.supplyAsync(() -> "Баштапкы мааниси");
    
    CompletableFuture<Integer> transformedFuture = initialFuture.thenApplyAsync(result -> {
        // Натыйжаны түрдүү кылуу
        return result.length();
    });
    
    transformedFuture.thenAccept(length -> {
        System.out.println("Жолдун узундугу: " + length);
    });
    
  3. Ката иштетүү:

    // Ката иштетүүнүн мисалы
    CompletableFuture<String> errorFuture = CompletableFuture.supplyAsync(() -> {
        if (true) {
            throw new RuntimeException("Ката кетти");
        }
        return "Ийгилик";
    }).exceptionally(ex -> {
        System.err.println("Ката иштетүү: " + ex.getMessage());
        return "Иштетилген ката"; // алмаштыруу мааниси
    });
    
    System.out.println(errorFuture.join());