Guava লাইব্রেরি Java অ্যাপ্লিকেশনগুলিতে কনকারেন্ট (concurrent) প্রোগ্রামিং সহজ করার জন্য শক্তিশালী ইউটিলিটি সরবরাহ করে। এর মধ্যে দুটি গুরুত্বপূর্ণ ধারণা হল ListenableFuture এবং Futures, যা অ্যাসিনক্রোনাস অপারেশনগুলি পরিচালনা এবং তাদের ফলাফল প্রাপ্তি সহজ করে তোলে। এই দুটি ফিচার Java অ্যাপ্লিকেশনে কনকারেন্সি এবং প্যারালাল প্রোগ্রামিংয়ের জন্য অত্যন্ত উপকারী।
ListenableFuture এর ধারণা
ListenableFuture হল একটি ইন্টারফেস যা Guava এর Future ক্লাসের উপর ভিত্তি করে কাজ করে, তবে এটি আরও শক্তিশালী, কারণ এটি কলব্যাক (callback) এবং ফলাফল প্রাপ্তির জন্য addListener() মেথড সরবরাহ করে। Future ক্লাস সাধারণত অ্যাসিনক্রোনাস অপারেশনগুলির ফলাফল (যেমন, থ্রেডের মাধ্যমে চলা দীর্ঘ সময়ের অপারেশন) সংগ্রহ করতে ব্যবহৃত হয়, তবে ListenableFuture এর মাধ্যমে আপনি সহজেই ফলাফল পাওয়ার পর একটি নির্দিষ্ট কার্যকলাপ (callback) পরিচালনা করতে পারেন।
ListenableFuture এর বৈশিষ্ট্য:
- এটি অ্যাসিনক্রোনাস অপারেশন সম্পন্ন হলে আপনি একটি কলব্যাক যুক্ত করতে পারেন।
ListenableFutureএর সাথে কাজ করতে পারলে আপনি ব্লকিং অপারেশন না করে ফলাফল পেতে পারেন।- আপনি যখন
addListener()মেথড ব্যবহার করেন, তখন এটি নির্দিষ্ট থ্রেডে (যেমন, GUI থ্রেড বা বিশেষ কোনো থ্রেডে) কলব্যাক কার্যকর করবে।
উদাহরণ:
import com.google.common.util.concurrent.ListenableFuture;
import com.google.common.util.concurrent.ListeningExecutorService;
import com.google.common.util.concurrent.MoreExecutors;
import com.google.common.util.concurrent.ListenableFuture;
import java.util.concurrent.Executors;
import java.util.concurrent.Callable;
public class ListenableFutureExample {
public static void main(String[] args) throws Exception {
// ExecutorService তৈরি
ListeningExecutorService service = MoreExecutors.listeningDecorator(Executors.newCachedThreadPool());
// অ্যাসিনক্রোনাস কাজ
ListenableFuture<String> future = service.submit(new Callable<String>() {
@Override
public String call() throws Exception {
// কিছু সময় নেওয়া কাজ
Thread.sleep(2000);
return "Task Completed!";
}
});
// ফলাফল পাওয়ার পর কলব্যাক অ্যাড করা
future.addListener(() -> {
try {
System.out.println("Task Result: " + future.get());
} catch (Exception e) {
e.printStackTrace();
}
}, service);
// থ্রেড বন্ধ করা
service.shutdown();
}
}
এই উদাহরণে, ListenableFuture ব্যবহৃত হয়েছে, যা addListener() মেথডের মাধ্যমে একটি কলব্যাক যুক্ত করা হয়েছে। কাজটি শেষ হওয়ার পর কলব্যাক অ্যাক্টিভেট হবে এবং তার ফলাফল প্রদর্শন করবে।
Futures এর ধারণা
Guava এর Futures ক্লাস হল বিভিন্ন ফাংশনালিটির একটি সেট যা Future এবং ListenableFuture এর সাথে কাজ করার জন্য ব্যবহৃত হয়। এটি ListenableFuture এবং Future এর উপর বিভিন্ন ইউটিলিটি প্রদান করে, যেমন:
Futures.addCallback()- কলব্যাক অ্যাড করাFutures.transform()- আসিনক্রোনাস ফলাফলকে ট্রান্সফর্ম করাFutures.allAsList()- একাধিকFutureএর সব ফলাফল একত্র করা
Futures ক্লাসের সাহায্যে আপনি একাধিক অ্যাসিনক্রোনাস কাজের ফলাফলকে সহজভাবে একত্রিত এবং পরিচালনা করতে পারেন।
Futures এর কিছু গুরুত্বপূর্ণ মেথড:
- Futures.addCallback()
- এটি
ListenableFutureএর জন্য একটি সহজ পদ্ধতি প্রদান করে, যার মাধ্যমে আপনি সফল এবং ব্যর্থ উভয় পরিস্থিতিতে কলব্যাক অ্যাড করতে পারেন।
- এটি
- Futures.transform()
- এটি
ListenableFutureবাFutureএর ফলাফলকে কোনো অন্য ধরনের ফলাফলে রূপান্তর করতে ব্যবহৃত হয়। উদাহরণস্বরূপ, আপনি যদি একটি অ্যাসিনক্রোনাস কাজের পরে কিছু হিসাব করতে চান, তবে এটি খুব উপকারী।
- এটি
- Futures.allAsList()
- এটি একাধিক
Futureকে একটিListenableFutureএ একত্রিত করে, যা সব কাজ সম্পন্ন হলে একটি পূর্ণাঙ্গ ফলাফল প্রদান করে।
- এটি একাধিক
উদাহরণ:
import com.google.common.util.concurrent.*;
import java.util.concurrent.*;
public class FuturesExample {
public static void main(String[] args) throws Exception {
ListeningExecutorService service = MoreExecutors.listeningDecorator(Executors.newCachedThreadPool());
ListenableFuture<Integer> future1 = service.submit(() -> 10);
ListenableFuture<Integer> future2 = service.submit(() -> 20);
// Futures.allAsList() ব্যবহার করা হয়েছে যাতে সব ফিউচার একত্রিত হয়ে একটি ফলাফল প্রদান করে
ListenableFuture<List<Integer>> allFutures = Futures.allAsList(future1, future2);
// Futures.addCallback() ব্যবহার করে সাফল্য এবং ব্যর্থতার ক্ষেত্রে কলব্যাক যোগ করা
Futures.addCallback(allFutures, new FutureCallback<List<Integer>>() {
@Override
public void onSuccess(List<Integer> result) {
System.out.println("All Futures Completed: " + result);
}
@Override
public void onFailure(Throwable t) {
t.printStackTrace();
}
}, service);
service.shutdown();
}
}
এখানে, Futures.allAsList() ব্যবহার করে আমরা দুটি ListenableFuture এর ফলাফল একত্রিত করেছি এবং Futures.addCallback() ব্যবহার করে তাদের সফল ফলাফলের উপর একটি কলব্যাক অ্যাড করেছি।
সারাংশ
Guava এর ListenableFuture এবং Futures ক্লাস Java অ্যাপ্লিকেশনে অ্যাসিনক্রোনাস প্রোগ্রামিংকে আরো শক্তিশালী এবং সহজ করে তোলে। ListenableFuture আপনাকে অ্যাসিনক্রোনাস কাজগুলোর সাথে ইন্টারঅ্যাক্ট করার জন্য কলব্যাক এবং ফলাফল সংগ্রহের জন্য আরও বেশি নমনীয়তা প্রদান করে, এবং Futures ক্লাস আপনাকে একাধিক অ্যাসিনক্রোনাস অপারেশনের ফলাফল একত্রিত করতে, ফলাফল ট্রান্সফর্ম করতে, এবং কলব্যাক ব্যবস্থাপনা সহজ করতে সহায়তা করে। এগুলি অ্যাসিনক্রোনাস কাজের পারফরম্যান্স এবং ব্যবস্থাপনায় উল্লেখযোগ্য উন্নতি সাধন করে।
Read more