Callable এবং Runnable ইন্টারফেস দুটোই জাভাতে কনকারেন্ট টাস্ক কার্যকর করার জন্য ব্যবহৃত হয়। তবে, তাদের মধ্যে কিছু গুরুত্বপূর্ণ পার্থক্য রয়েছে।
Runnable Interface
- রিটার্ন ভ্যালু নেই:
Runnableইন্টারফেস কোনো রিটার্ন ভ্যালু দেয় না।run()মেথড কেবল একটি টাস্ক সম্পন্ন করে। - চলতি থ্রেডে এক্সিকিউট হয়:
RunnableসরাসরিThreadক্লাস বাExecutorServiceদ্বারা চালানো হয়। - Exception Handling নেই:
run()মেথড চেকড এক্সেপশন থ্রো করতে পারে না। - ব্যবহার: সাধারণত হালকা কাজ সম্পাদনের জন্য ব্যবহার করা হয়।
Runnable উদাহরণ:
class MyRunnable implements Runnable {
@Override
public void run() {
System.out.println("Runnable is running: " + Thread.currentThread().getName());
}
}
public class RunnableExample {
public static void main(String[] args) {
Runnable myRunnable = new MyRunnable();
Thread thread = new Thread(myRunnable);
thread.start();
}
}
Callable Interface
- রিটার্ন ভ্যালু দেয়:
Callableইন্টারফেস একটি রিটার্ন ভ্যালু প্রদান করে। এটিcall()মেথড ব্যবহার করে। - Future অবজেক্টের মাধ্যমে রিটার্ন:
Callable-এর রিটার্ন ভ্যালুFutureঅবজেক্টের মাধ্যমে অ্যাক্সেস করা যায়। - Exception Handling সমর্থন করে:
call()মেথড চেকড এক্সেপশন থ্রো করতে পারে। - ব্যবহার: কমপ্লেক্স বা দীর্ঘমেয়াদী কাজ যেখানে রিটার্ন ভ্যালু প্রয়োজন হয়।
Callable উদাহরণ:
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
class MyCallable implements Callable<String> {
@Override
public String call() throws Exception {
Thread.sleep(1000); // কিছু কাজ করছে
return "Callable completed by: " + Thread.currentThread().getName();
}
}
public class CallableExample {
public static void main(String[] args) {
ExecutorService executor = Executors.newSingleThreadExecutor();
Callable<String> myCallable = new MyCallable();
Future<String> future = executor.submit(myCallable);
try {
System.out.println("Result: " + future.get()); // Future থেকে ফলাফল পেতে
} catch (Exception e) {
e.printStackTrace();
} finally {
executor.shutdown();
}
}
}
Callable এবং Runnable-এর মধ্যে পার্থক্য
| বৈশিষ্ট্য | Runnable | Callable |
|---|---|---|
| রিটার্ন ভ্যালু | না (void) | হ্যাঁ (Future অবজেক্ট ব্যবহার করে)। |
| মেথডের নাম | run() | call() |
| Exception Handling | চেকড এক্সেপশন সমর্থন করে না। | চেকড এক্সেপশন থ্রো করতে পারে। |
| Future Integration | Future অবজেক্ট সাপোর্ট করে না। | Future অবজেক্টের মাধ্যমে ফলাফল প্রদান করে। |
| ব্যবহার | হালকা কাজ যেখানে রিটার্ন ভ্যালু প্রয়োজন নেই। | জটিল কাজ যেখানে রিটার্ন ভ্যালু এবং এক্সেপশন হ্যান্ডলিং প্রয়োজন। |
Runnable বনাম Callable: কোনটি ব্যবহার করবেন?
- Runnable ব্যবহার করুন:
- যদি কোনো রিটার্ন ভ্যালু প্রয়োজন না হয়।
- কাজটি সহজ এবং দ্রুত সম্পন্নযোগ্য।
- আপনি
ThreadAPI বাExecutorServiceব্যবহার করছেন।
- Callable ব্যবহার করুন:
- যদি কাজের পরে একটি রিটার্ন ভ্যালু প্রয়োজন হয়।
- যদি কাজটি জটিল এবং এক্সেপশন হ্যান্ডলিং প্রয়োজন হয়।
- যদি
Futureবা অ্যাসিঙ্ক্রোনাস প্রসেসিং দরকার হয়।
উদাহরণ: Runnable বনাম Callable
import java.util.concurrent.*;
public class RunnableVsCallableExample {
public static void main(String[] args) throws Exception {
ExecutorService executor = Executors.newFixedThreadPool(2);
// Runnable উদাহরণ
Runnable myRunnable = () -> System.out.println("Runnable is running.");
executor.execute(myRunnable);
// Callable উদাহরণ
Callable<String> myCallable = () -> {
Thread.sleep(500);
return "Callable result.";
};
Future<String> future = executor.submit(myCallable);
// Callable এর রিটার্ন ভ্যালু পান
System.out.println("Callable Result: " + future.get());
executor.shutdown();
}
}
- Runnable হলো হালকা ও দ্রুত সম্পন্ন হওয়া কাজের জন্য।
- Callable ব্যবহার করুন যখন রিটার্ন ভ্যালু বা অ্যাসিঙ্ক্রোনাস প্রসেসিং প্রয়োজন।
এই পার্থক্যগুলো মনে রেখে কনকারেন্সি সম্পর্কিত কাজ আরো কার্যকরভাবে পরিচালনা করা যাবে।
Content added By
Read more