Sobes.tech
Middle

CompletableFuture классынын концепциясы жөнүндө айтып бериңиз.

sobes.tech AI

AIден жооп

CompletableFuture — бул Java 8+ классы, ал Future жана CompletionStage интерфейстерин ишке ашырат. Ал асинхрондуу эсептөө болуп саналат, ал бир убакта аяктап калышы мүмкүн (же каталар чыгышы мүмкүн), жана анын жыйынтыгы боюнча декларативдүү түрдө кийинки аракеттерди аткарууга болот, негизги агымды блоктебестен.

Негизги мүмкүнчүлүктөр:

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

Негизги ыкмалары:

  • Түзүү:
    • supplyAsync(Supplier<T> supplier): Supplier асинхрондуу иштетилет жана анын жыйынтыгы менен CompletableFuture кайтарат.
    • runAsync(Runnable runnable): Runnable асинхрондуу иштетилет жана CompletableFuture<Void> кайтарат.
    • completedFuture(T value): Эскирип калган CompletableFuture түзөт, белгилүү бир мааниге ээ.
  • Өзгөртүү:
    • thenApply(Function<T, U> fn): Натыйжада функцияны колдонуу, ал future аяктагандан кийин ишке ашырылат.
    • thenAccept(Consumer<T> action): Натыйжада аракетти аткаруу, ал future аяктагандан кийин ишке ашырылат.
    • thenRun(Runnable action): future аяктагандан кийин аракетти аткаруу, натыйжаны эске албастан.
    • thenCompose(Function<T, CompletionStage<U>> fn): Чынжырларды түзүүгө мүмкүндүк берет, бир future натыйжасы башка future түзүү үчүн колдонулат.
  • Коомдоштуруу:
    • thenCombine(CompletionStage<U> other, BiFunction<T, U, V> fn): Эки future натыйжаларын бириктирет.
    • allOf(CompletableFuture<?>... cfs): Бардык берилген future аяктагандан кийин аяктап турган CompletableFuture<Void> кайтарат.
    • anyOf(CompletableFuture<?>... cfs): Бир нече future бири аяктагандан кийин аяктап турган CompletableFuture<Object> кайтарат.
  • Ката иштетүү:
    • exceptionally(Function<Throwable, T> fn): Ката иштетет, альтернативдүү маанини кайтарат.
    • handle(BiFunction<T, Throwable, U> fn): Натыйжа жана ката эки нерсени иштетет.

Мисал:

// Асинхрондуу тапшырманы ишке киргизүү
CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> {
    try {
        Thread.sleep(1000); // Узак ишти имитациялоо
    } catch (InterruptedException e) {
        throw new IllegalStateException(e);
    }
    return "Асинхрондук операциянын жыйынтыгы";
});

// Тапшырма аяктагандан кийин аракет кылуу (блоктогон эмес)
future.thenAccept(result -> {
    System.out.println("Алып келген жыйынтык: " + result);
});

// Бир дагы аракет, ал биринчи нерсеге көз каранды
future.thenApply(String::toUpperCase)
      .thenAccept(upperCaseResult -> {
          System.out.println("Жыйынтык чоң тамгаларда: " + upperCaseResult);
      });

// Бардык тапшырмаларды күтүү (чындыктарда көбүнчө ачык `get()`/`join()` колдонбойт)
// future.join();

CompletableFuture — Javaда реактивдүү жана блоктогон эмес код жазуу үчүн күчтүү курал, ал асинхрондуулук менен иштөөдө классикалык Future интерфейсине салыштырмалуу көп жеңилдиктерди берет.