Sobes.tech
Middle

Java'da CompletableFuture nima uchun kerak?

sobes.tech AI

AIdan javob

CompletableFuture vazifalarni asinxron bajarish va asinxron operatsiyalarni birlashtirish uchun ishlatiladi. U kelajakda tugatilishi mumkin bo'lgan asinxron operatsiyaning natijasini ifodalaydi.

Asosiy afzalliklari va foydalanish sabablar:

  • Asinxron bajarish: Vazifalarni fon rejimida bajarishga imkon beradi, asosiy oqimni bloklamasdan.
  • Asinxron operatsiyalarni birlashtirish: Bir nechta asinxron vazifalarni ketma-ket yoki parallel ravishda qanday bajarilishini belgilash va ularning natijalarini ishlash imkonini beradi.
  • Xatoliklarni boshqarish: Asinxron bajarilayotgan vazifalarda xatoliklarni boshqarish uchun mexanizmlar taqdim etadi.
  • Moslashuvchanlik: Natijani ishlash uchun turli usullarni qo'llab-quvvatlaydi (masalan, funksiyani qo'llash, keyingi vazifani bajarish) va bajarish oqimlarini belgilash.

Foydalanish misollari:

  1. Bir nechta mustaqil vazifalarni parallel bajarish va ularning tugashini kutish:

    // Ikki vazifaning parallel bajarilishi misoli
    CompletableFuture<String> future1 = CompletableFuture.supplyAsync(() -> {
        // Uzun operatsiya 1
        return "Natija 1";
    });
    
    CompletableFuture<String> future2 = CompletableFuture.supplyAsync(() -> {
        // Uzun operatsiya 2
        return "Natija 2";
    });
    
    CompletableFuture<Void> combinedFuture = CompletableFuture.allOf(future1, future2);
    
    combinedFuture.join(); // Ikkala vazifaning tugashini kutish
    
  2. Ketma-ket asinxron operatsiyalar:

    // Ketma-ket vazifa bajarish misoli
    CompletableFuture<String> initialFuture = CompletableFuture.supplyAsync(() -> "Boshlang'ich qiymat");
    
    CompletableFuture<Integer> transformedFuture = initialFuture.thenApplyAsync(result -> {
        // Natijani o'zgartirish
        return result.length();
    });
    
    transformedFuture.thenAccept(length -> {
        System.out.println("Qator uzunligi: " + length);
    });
    
  3. Xatoliklarni boshqarish:

    // Xatoliklarni boshqarish misoli
    CompletableFuture<String> errorFuture = CompletableFuture.supplyAsync(() -> {
        if (true) {
            throw new RuntimeException("Xato yuz berdi");
        }
        return "Muvaffaqiyat";
    }).exceptionally(ex -> {
        System.err.println("Xato bilan ishlash: " + ex.getMessage());
        return "Xato boshqarildi"; // Zaxira qiymat
    });
    
    System.out.println(errorFuture.join());