CompletableFuture nədir?
sobes.tech Süni İntellekt
AI-dan cavab
CompletableFuture Java 8+-də Future modelinin genişləndirilməsidir və asinxron proqramlaşdırma və tapşırıqların birləşdirilməsi imkanlarını əlavə edir.
O, CompletionStage və Future interfeyslərini həyata keçirir. CompletionStage hesablama mərhələlərinin asinxron icrası və birləşdirilməsi üçün müqaviləni müəyyən edir.
Əsas xüsusiyyətlər:
- Bloklamayan əməliyyatlar: Tapşırıqları asinxron şəkildə yerinə yetirməyə imkan verir, əsas icra axını bloklamadan.
- Birləşdirmə: Bir çox asinxron əməliyyatın nəticələrini əlaqələndirmək və birləşdirmək üçün zəngin API təqdim edir.
- İstisna idarəetməsi: Asinxron axınlarda səhvlərin işlənməsi üçün daxili mexanizmlər.
- Yaradılması: Tamamlanmış, tamamlanmamış və ya səhv olan
CompletableFuture-lər yarada bilərsiniz. - Asılılıqlar: Bir tapşırığın digərinin tamamlanmasına bağlı olduğu zəncirlər yaratmağa imkan verir.
- Paralel icra:
allOfvəanyOfkimi metodlar ilə bir neçə tapşırığı paralel şəkildə icra etmək.
İstifadə nümunələri:
-
Yaradı və tamamla:
// Tamamlanmış CompletableFuture yaradılması CompletableFuture<String> completedFuture = CompletableFuture.completedFuture("Salam"); // Tamamlanmamış CompletableFuture yaradılması və sonra tamamlanması CompletableFuture<String> future = new CompletableFuture<>(); // ... asinxron iş yerinə yetirilir ... future.complete("Bitdi"); // Yaxud səhv olduqda // future.completeExceptionally(new RuntimeException("Xəta")); -
Asinxron tapşırığın yerinə yetirilməsi:
CompletableFuture<String> asyncFuture = CompletableFuture.supplyAsync(() -> { // Asinxron iş (məsələn, fayldan oxuma, şəbəkə sorğusu) try { Thread.sleep(1000); } catch (InterruptedException e) { throw new IllegalStateException(e); } return "Asinxron Nəticə"; }); -
thenApplyilə birləşdirmə:CompletableFuture<Integer> result = CompletableFuture.supplyAsync(() -> 10) .thenApply(x -> x * 2); // Əvvəlki mərhələnin nəticəsi funksiyaya ötürülür -
thenCombineilə birləşdirmə:CompletableFuture<Integer> future1 = CompletableFuture.supplyAsync(() -> 10); CompletableFuture<Integer> future2 = CompletableFuture.supplyAsync(() -> 20); CompletableFuture<Integer> combinedFuture = future1.thenCombine(future2, (res1, res2) -> res1 + res2); // İki CompletableFuture nəticələrinin birləşdirilməsi -
thenAcceptilə tamamlanma işlənməsi:CompletableFuture.supplyAsync(() -> "Nəticə") .thenAccept(result -> System.out.println("Tapşırıq nəticə ilə tamamlandı: " + result)); // Tamamlama sonrası hərəkət yerinə yetirmək, dəyər qaytarmadan -
İstisna ilə işləmə
exceptionallyilə:CompletableFuture<String> futureWithException = CompletableFuture.supplyAsync(() -> { throw new RuntimeException("Nəsə səhv oldu"); }).exceptionally(ex -> { System.err.println("Xəta baş verdi: " + ex.getMessage()); return "Əsas dəyər"; // Səhv zamanı default dəyər qaytarır });
CompletableFuture Java-da Asynchronous və bloklamayan kod yazmağı çox sadələşdirir, onu daha oxunaqlı və dəstəklənən edir, ənənəvi callbacklər və ya Future.get() bloklama çağırışları ilə müqayisədə.