Combining Multiple Futures এবং Exception Handling

CompletableFuture এবং Asynchronous Programming - জাভা কনকারেন্সি (Java Concurrency) - Java Technologies

289

Java CompletableFuture API জাভার কনকারেন্সি ফ্রেমওয়ার্কে শক্তিশালী টুল, যা অ্যাসিঙ্ক্রোনাস কম্পিউটেশন সহজ এবং কার্যকর করে।


Combining Multiple Futures

১. thenCombine() ব্যবহার করে দুটি Future যুক্ত করা

import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;

public class CombineFuturesExample {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        // Future 1: প্রথম সংখ্যা
        CompletableFuture<Integer> future1 = CompletableFuture.supplyAsync(() -> {
            System.out.println("Executing Future 1...");
            return 10;
        });

        // Future 2: দ্বিতীয় সংখ্যা
        CompletableFuture<Integer> future2 = CompletableFuture.supplyAsync(() -> {
            System.out.println("Executing Future 2...");
            return 20;
        });

        // দুটি Future এর ফলাফল যোগ করে নতুন Future তৈরি করা
        CompletableFuture<Integer> result = future1.thenCombine(future2, (num1, num2) -> num1 + num2);

        // ফলাফল প্রিন্ট করা
        System.out.println("Combined Result: " + result.get());
    }
}

ব্যাখ্যা:

  • thenCombine(): দুটি Future এর ফলাফল নিয়ে একটি নতুন ফলাফল তৈরি করে।
  • এখানে দুটি Future গাণিতিক যোগফল তৈরি করতে ব্যবহার করা হয়েছে।

২. allOf() ব্যবহার করে একাধিক Future একত্র করা

import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;

public class AllOfExample {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        // তিনটি Future তৈরি
        CompletableFuture<String> future1 = CompletableFuture.supplyAsync(() -> "Task 1 Completed");
        CompletableFuture<String> future2 = CompletableFuture.supplyAsync(() -> "Task 2 Completed");
        CompletableFuture<String> future3 = CompletableFuture.supplyAsync(() -> "Task 3 Completed");

        // সব Future একত্র করা
        CompletableFuture<Void> combinedFuture = CompletableFuture.allOf(future1, future2, future3);

        // সব Future সম্পন্ন হলে আউটপুট দেখানো
        combinedFuture.thenRun(() -> {
            try {
                System.out.println(future1.get());
                System.out.println(future2.get());
                System.out.println(future3.get());
            } catch (Exception e) {
                e.printStackTrace();
            }
        }).get();
    }
}

ব্যাখ্যা:

  • allOf(): একাধিক Future একত্র করে একটি নতুন CompletableFuture তৈরি করে।
  • এখানে তিনটি Future এর কাজ শেষ হলে আউটপুট প্রদর্শন করা হয়।

৩. anyOf() ব্যবহার করে প্রথম সম্পন্ন হওয়া Future নির্বাচন

import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;

public class AnyOfExample {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        // Future তৈরি
        CompletableFuture<String> future1 = CompletableFuture.supplyAsync(() -> {
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            return "Task 1 Completed";
        });

        CompletableFuture<String> future2 = CompletableFuture.supplyAsync(() -> "Task 2 Completed");

        // প্রথম সম্পন্ন হওয়া Future নির্বাচন
        CompletableFuture<Object> result = CompletableFuture.anyOf(future1, future2);

        // ফলাফল প্রিন্ট করা
        System.out.println("First Completed Task: " + result.get());
    }
}

ব্যাখ্যা:

  • anyOf(): একাধিক Future থেকে প্রথম সম্পন্ন হওয়া Future এর ফলাফল প্রদান করে।
  • এটি দ্রুত ফলাফল পেতে কার্যকর।

Exception Handling

১. exceptionally() ব্যবহার করে ব্যতিক্রম পরিচালনা

import java.util.concurrent.CompletableFuture;

public class ExceptionHandlingExample {
    public static void main(String[] args) {
        CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> {
            if (true) {
                throw new RuntimeException("Something went wrong!");
            }
            return "Success";
        }).exceptionally(ex -> {
            System.out.println("Exception: " + ex.getMessage());
            return "Fallback Result";
        });

        System.out.println("Result: " + future.join());
    }
}

ব্যাখ্যা:

  • exceptionally(): ব্যতিক্রমের সময় বিকল্প ফলাফল প্রদান করে।
  • এখানে ব্যতিক্রমের ক্ষেত্রে "Fallback Result" প্রদর্শিত হয়।

২. handle() ব্যবহার করে ব্যতিক্রম ও স্বাভাবিক ফলাফল পরিচালনা

import java.util.concurrent.CompletableFuture;

public class HandleExample {
    public static void main(String[] args) {
        CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> {
            if (true) {
                throw new RuntimeException("An error occurred!");
            }
            return "Success";
        }).handle((result, ex) -> {
            if (ex != null) {
                System.out.println("Exception: " + ex.getMessage());
                return "Handled Error Result";
            }
            return result;
        });

        System.out.println("Result: " + future.join());
    }
}

ব্যাখ্যা:

  • handle(): ব্যতিক্রম এবং স্বাভাবিক উভয় ফলাফলের জন্য কাজ করে।
  • এটি ব্যতিক্রমের ক্ষেত্রে বিকল্প ফলাফল প্রদান করে এবং স্বাভাবিক ক্ষেত্রে মূল ফলাফল প্রদান করে।

৩. whenComplete() ব্যবহার করে পরবর্তী কাজ পরিচালনা

import java.util.concurrent.CompletableFuture;

public class WhenCompleteExample {
    public static void main(String[] args) {
        CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> {
            if (true) {
                throw new RuntimeException("Error occurred!");
            }
            return "Success";
        }).whenComplete((result, ex) -> {
            if (ex != null) {
                System.out.println("Completed with Exception: " + ex.getMessage());
            } else {
                System.out.println("Completed Successfully: " + result);
            }
        });

        future.join();
    }
}

ব্যাখ্যা:

  • whenComplete(): কাজ সম্পন্ন হওয়ার পরে ব্যতিক্রম বা স্বাভাবিক ফলাফল পরিচালনা করে।
  • এটি শুধুমাত্র ফলাফল বা ব্যতিক্রম লগ করতে ব্যবহার করা হয়।
  1. Combining Multiple Futures:
    • thenCombine(): দুটি Future এর ফলাফল একত্র করে।
    • allOf(): সব Future একত্র করে কাজ সম্পন্ন হলে চলায়।
    • anyOf(): প্রথম সম্পন্ন হওয়া Future থেকে ফলাফল প্রদান করে।
  2. Exception Handling:
    • exceptionally(): ব্যতিক্রমের সময় বিকল্প ফলাফল প্রদান করে।
    • handle(): ব্যতিক্রম এবং স্বাভাবিক ফলাফল উভয় পরিচালনা করে।
    • whenComplete(): কাজের শেষে ফলাফল বা ব্যতিক্রম পরিচালনা করে।

এই ফিচারগুলো ব্যবহার করে জাভাতে অ্যাসিঙ্ক্রোনাস প্রোগ্রামিং আরও সহজ, কার্যকর এবং স্থিতিশীল করা যায়।

Content added By
Promotion

Are you sure to start over?

Loading...