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());