Java 8-এ CompletableFuture যোগ করার মাধ্যমে asynchronous programming বা non-blocking operations কার্যকরভাবে করা সম্ভব হয়েছে। এটি আপনাকে future টাস্কগুলির ফলাফল asynchronously প্রাপ্ত করার পাশাপাশি, একাধিক asynchronous টাস্ক পরিচালনা করতে সহায়তা করে। Java 9 এবং পরবর্তী সংস্করণে CompletableFuture-এ বেশ কিছু নতুন ফিচার এবং উন্নত সংস্করণ অন্তর্ভুক্ত করা হয়েছে, যা asynchronous প্রোগ্রামিংকে আরও সহজ এবং কার্যকরী করে তুলেছে।
CompletableFuture এর উন্নত সংস্করণ:
1. CompletableFuture-এ newStage() পদ্ধতি (Java 9)
Java 9-এ CompletableFuture তে newStage() নামক একটি নতুন পদ্ধতি যোগ করা হয়েছে, যা CompletableFuture এর একটি নতুন স্টেজ তৈরি করতে ব্যবহৃত হয়। এটি একটি callback পদ্ধতির মাধ্যমে নির্দিষ্ট asynchronous কাজ চালায়।
ব্যবহার:newStage() পদ্ধতি একটি নতুন CompletionStage তৈরি করে এবং এর সাথে অ্যাসিনক্রোনাস অপারেশন পরিচালনা করতে সহায়তা করে।
CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> "Hello");
CompletableFuture<String> result = future.newStage(() -> "World");এখানে newStage() ব্যবহার করে একটি নতুন stage তৈরি করা হয়েছে, যেটি CompletableFuture এর পরে একযোগভাবে একাধিক কাজ পরিচালনা করতে সাহায্য করবে।
2. orTimeout() পদ্ধতি (Java 9)
Java 9-এ orTimeout() পদ্ধতি যোগ করা হয়েছে, যা একটি timeout নির্ধারণ করে। যদি নির্দিষ্ট সময়ের মধ্যে CompletableFuture ফলাফল না দেয়, তাহলে একটি TimeoutException ছুড়ে দেবে।
ব্যবহার:
CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> {
// কিছু দীর্ঘ সময়ের কাজ
return "Hello, World!";
});
future.orTimeout(5, TimeUnit.SECONDS) // 5 সেকেন্ডের মধ্যে ফলাফল না এলে টাইমআউট
.exceptionally(ex -> "Timed Out")
.thenAccept(System.out::println);এটি নিশ্চিত করে যে নির্দিষ্ট সময়ের মধ্যে asynchronous কাজ সম্পন্ন না হলে, প্রোগ্রাম টাইমআউট হয়ে যাবে এবং একটি exception হ্যান্ডলিং করবে।
3. completeAsync() পদ্ধতি (Java 9)
Java 9-এ completeAsync() পদ্ধতি অন্তর্ভুক্ত করা হয়েছে, যা আপনি যদি কোনো নির্দিষ্ট value asynchronously পূর্ণ করতে চান, তবে ব্যবহার করা যায়।
ব্যবহার:
CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> "Initial Value")
.completeAsync(() -> "Completed Value");
future.thenAccept(System.out::println); // Output: "Completed Value"এটি তখন ব্যবহৃত হয় যখন আপনি CompletableFuture এর মাধ্যমে সম্পন্ন হওয়া কাজের ফলাফল পরিবর্তন করতে চান এবং asynchronous প্রসেসিংয়ের মধ্যে তা করবেন।
4. exceptionally() পদ্ধতি (Java 9)
Java 9-এ exceptionally() পদ্ধতি উন্নত করা হয়েছে, যা CompletableFuture এ কোনো exception হলে তা সামলাতে ব্যবহৃত হয়। আপনি যদি asynchronous কাজের মধ্যে কোনো exception handle করতে চান তবে এটি সাহায্য করবে।
ব্যবহার:
CompletableFuture<Integer> future = CompletableFuture.supplyAsync(() -> {
if (true) throw new RuntimeException("Error occurred");
return 1;
});
future.exceptionally(ex -> {
System.out.println(ex.getMessage()); // Error occurred
return 0; // Default value
});এটি exception handling সহজ করে এবং নিশ্চিত করে যে asynchronous কাজ চলতে থাকা অবস্থায় exception সঠিকভাবে হ্যান্ডেল করা হবে।
5. allOf() এবং anyOf() পদ্ধতির উন্নতি
Java 9 এবং পরবর্তী সংস্করণে CompletableFuture.allOf() এবং CompletableFuture.anyOf() পদ্ধতিগুলিতে কিছু নতুন সুবিধা এসেছে। এগুলি একাধিক asynchronous task পরিচালনার জন্য ব্যবহৃত হয়:
allOf(): সমস্ত futures সফল হলে একত্রে প্রাপ্ত হয়।anyOf(): যেকোনো একটি future প্রথমে পূর্ণ হলে তা প্রাপ্ত হয়।
ব্যবহার:
CompletableFuture<Void> future1 = CompletableFuture.runAsync(() -> {
// কিছু কাজ
});
CompletableFuture<Void> future2 = CompletableFuture.runAsync(() -> {
// কিছু কাজ
});
CompletableFuture<Void> allOf = CompletableFuture.allOf(future1, future2);
allOf.thenRun(() -> System.out.println("All tasks completed"));
CompletableFuture<Object> anyOf = CompletableFuture.anyOf(future1, future2);
anyOf.thenAccept(result -> System.out.println("One task completed: " + result));এই পদ্ধতিগুলির মাধ্যমে আপনি একাধিক asynchronous কাজের মধ্যে synchronization করতে পারেন, যাতে একসাথে বা যেকোনো একটি কাজ সম্পন্ন হলে পরবর্তী কাজ চালানো সম্ভব হয়।
CompletableFuture এর উন্নত সংস্করণ ব্যবহার করার সুবিধা:
- Non-blocking execution: Asynchronous কাজগুলো non-blocking থাকে, ফলে কাজ সম্পন্ন হওয়ার পর অন্য কাজের সাথে সমান্তরালভাবে চলতে পারে।
- Improved Exception Handling: Java 9 এবং পরবর্তী সংস্করণে Exception Handling আরও উন্নত করা হয়েছে, যা খুঁটিনাটি ত্রুটিগুলোকেও সঠিকভাবে হ্যান্ডেল করতে সহায়ক।
- Simplified asynchronous programming: Java 9 থেকে
CompletableFutureএর নতুন পদ্ধতিগুলি asynchronous প্রোগ্রামিংকে আরও সহজ এবং পরিষ্কার করে তুলেছে। - Timeout Management:
orTimeout()পদ্ধতি যোগ হওয়ার ফলে asynchronous কাজের জন্য টাইমআউট নির্ধারণ করা সহজ হয়ে গেছে, যা পূর্বে কঠিন ছিল। - Parallel Task Execution:
allOf()এবংanyOf()পদ্ধতির মাধ্যমে একাধিক asynchronous কাজ সমান্তরালে করা সম্ভব, যা পারফরম্যান্সের উন্নতি ঘটায়।
উপসংহার:
Java 9 এবং তার পরবর্তী সংস্করণে CompletableFuture তে বেশ কিছু উন্নত ফিচার এবং পদ্ধতি অন্তর্ভুক্ত করা হয়েছে, যা asynchronous প্রোগ্রামিং আরও সহজ, কার্যকরী এবং পারফরম্যান্স-বান্ধব করেছে। orTimeout(), newStage(), exceptionally(), এবং completeAsync() এর মত নতুন ফিচারগুলো non-blocking অপারেশন পরিচালনা এবং exception handling সহজ করেছে, যা জাভার asynchronous প্রোগ্রামিংয়ের অভিজ্ঞতাকে নতুন উচ্চতায় নিয়ে গেছে।
Read more