परिचय
Runnable और Callable दोनों फंक्शनल इंटरफेस हैं। इन इंटरफेस को इम्प्लीमेंट करने वाली क्लासेस को दूसरे थ्रेड द्वारा निष्पादित करने के लिए डिज़ाइन किया गया है।
थ्रेड को Runnable के साथ शुरू किया जा सकता है और नया थ्रेड शुरू करने के दो तरीके हैं: एक है Thread क्लास को सबक्लास करना और दूसरा है Runnable इंटरफेस को इम्प्लीमेंट करना।
Thread क्लास में Callable के लिए कंस्ट्रक्टर नहीं है इसलिए हमें थ्रेड निष्पादित करने के लिए ExecutorService क्लास का उपयोग करना चाहिए।
| क्र. सं. | मुख्य बिंदु | Runnable | Callable |
|---|---|---|---|
| 1 | पैकेज | यह java.lang से संबंधित है | यह java.util.concurrent से संबंधित है |
| 2 | थ्रेड निर्माण | हम Runnable को पैरामीटर के रूप में पास करके थ्रेड बना सकते हैं। | हम Callable को पैरामीटर के रूप में पास करके थ्रेड नहीं बना सकते |
| 3 | रिटर्न टाइप | Runnable कुछ भी वापस नहीं करता | Callable परिणाम वापस कर सकता है |
| 4 | मेथड | इसमें run() मेथड है | इसमें call() मेथड है |
| 5 | बल्क एक्जीक्यूशन | इसका उपयोग टास्क के बल्क एक्जीक्यूशन के लिए नहीं किया जा सकता | इसका उपयोग invokeAll() को इनवोक करके टास्क के बल्क एक्जीक्यूशन के लिए किया जा सकता है। |
Runnable का उदाहरण
public class RunnableExample implements Runnable {
public void run() {
System.out.println("Runnable से नमस्ते!");
}
public static void main(String args[]) {
(new Thread(new RunnableExample())).start();
}
}Callable का उदाहरण
public class Main {
public static void main(String args[]) throws InterruptedException, ExecutionException {
ExecutorService services = Executors.newSingleThreadExecutor();
Future> future = services.submit(new Task());
System.out.println("फ्यूचर ऑब्जेक्ट में " + future.get());
}
}
import java.util.concurrent.Callable;
public class Task implements Callable {
@Override
public String call() throws Exception {
System.out.println("कॉल में");
String name = "test";
return name;
}
}