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 интерфейсине салыштырмалуу көп жеңилдиктерди берет.