उदाहरण
class MyThread extends Thread {
public void run() {
try {
System.out.println("थ्रेड " + Thread.currentThread().getId() + " वर्तमान में चल रहा है");
} catch (Exception e) {
System.out.println("अपवाद पकड़ा गया");
}
}
}
public class Main {
public static void main(String[] args) {
int n = 6;
for (int i = 1; i < n; i++) {
MyThread my_object = new MyThread();
my_object.run(); // start() के बजाय सीधे run() कॉल करना
}
}
}
आउटपुट
थ्रेड 1 वर्तमान में चल रहा है
थ्रेड 1 वर्तमान में चल रहा है
थ्रेड 1 वर्तमान में चल रहा है
थ्रेड 1 वर्तमान में चल रहा है
थ्रेड 1 वर्तमान में चल रहा है
व्याख्या: 'MyThread' नामक एक क्लास मुख्य Thread को विरासत में लेती है, जिसमें एक 'run' फंक्शन परिभाषित होता है, जो वर्तमान में चल रहे थ्रेड की आईडी देता है। एक ट्राई और कैच ब्लॉक परिभाषित किया जाता है जो अपवाद (यदि कोई हो) को पकड़ता है और प्रासंगिक त्रुटि प्रदर्शित करता है। मुख्य फंक्शन में, एक 'for' लूप चलाया जाता है और 'MyThread' क्लास का नया ऑब्जेक्ट बनाया जाता है। इस ऑब्जेक्ट पर 'run' फंक्शन को कॉल किया जाता है।
run() vs start() - महत्वपूर्ण अंतर:
| पहलू | run() सीधे कॉल करना | start() कॉल करना |
|---|---|---|
| थ्रेड निर्माण | नया थ्रेड नहीं बनाता | नया थ्रेड बनाता है |
| निष्पादन | वर्तमान थ्रेड में क्रमिक | नए थ्रेड में समानांतर |
| आउटपुट में थ्रेड आईडी | सभी समान (मुख्य थ्रेड) | प्रत्येक के लिए अलग |
| उपयोग मामला | परीक्षण/डीबगिंग | वास्तविक बहु-थ्रेडिंग |
सही तरीका:
MyThread t = new MyThread();
t.start(); // यह नया थ्रेड बनाता है और फिर run() को कॉल करता है
निष्कर्ष: हां, आप सीधे run() कॉल कर सकते हैं, लेकिन यह बहु-थ्रेडिंग नहीं बनाता - यह केवल मुख्य थ्रेड में एक सामान्य विधि कॉल की तरह निष्पादित होता है।