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