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(): কাজ সম্পন্ন হওয়ার পরে ব্যতিক্রম বা স্বাভাবিক ফলাফল পরিচালনা করে।- এটি শুধুমাত্র ফলাফল বা ব্যতিক্রম লগ করতে ব্যবহার করা হয়।
- Combining Multiple Futures:
thenCombine(): দুটি Future এর ফলাফল একত্র করে।allOf(): সব Future একত্র করে কাজ সম্পন্ন হলে চলায়।anyOf(): প্রথম সম্পন্ন হওয়া Future থেকে ফলাফল প্রদান করে।
- Exception Handling:
exceptionally(): ব্যতিক্রমের সময় বিকল্প ফলাফল প্রদান করে।handle(): ব্যতিক্রম এবং স্বাভাবিক ফলাফল উভয় পরিচালনা করে।whenComplete(): কাজের শেষে ফলাফল বা ব্যতিক্রম পরিচালনা করে।
এই ফিচারগুলো ব্যবহার করে জাভাতে অ্যাসিঙ্ক্রোনাস প্রোগ্রামিং আরও সহজ, কার্যকর এবং স্থিতিশীল করা যায়।
Content added By
Read more