थ्रेड एक्जीक्यूशन का नया थ्रेड बनाने के दो तरीके हैं। एक है Thread क्लास का सबक्लास घोषित करना। इस सबक्लास को Thread क्लास के run मेथड को ओवरराइड करना चाहिए। सबक्लास का इंस्टेंस तब एलोकेट और स्टार्ट किया जा सकता है।
थ्रेड बनाने का दूसरा तरीका है Runnable इंटरफेस को इम्प्लीमेंट करने वाली क्लास घोषित करना। वह क्लास फिर run मेथड को इम्प्लीमेंट करती है। क्लास का इंस्टेंस तब एलोकेट किया जा सकता है, Thread बनाते समय आर्गुमेंट के रूप में पास किया जाता है, और स्टार्ट किया जाता है।
हर थ्रेड का पहचान के लिए एक नाम होता है। एक से अधिक थ्रेड्स का नाम समान हो सकता है। यदि थ्रेड बनाते समय नाम निर्दिष्ट नहीं किया जाता है, तो उसके लिए एक नया नाम जनरेट किया जाता है।
| क्र.सं. | मुख्य बिंदु | Thread | Runnable |
|---|---|---|---|
| 1 | बुनियादी | Thread एक क्लास है। इसका उपयोग थ्रेड बनाने के लिए किया जाता है | Runnable एक फंक्शनल इंटरफेस है जिसका उपयोग थ्रेड बनाने के लिए किया जाता है |
| 2 | मेथड्स | इसमें start() और run() सहित कई मेथड्स होते हैं | इसमें केवल एक एब्स्ट्रैक्ट मेथड run() होता है |
| 3 | ऑब्जेक्ट एसोसिएशन | प्रत्येक थ्रेड एक यूनिक ऑब्जेक्ट बनाता है और उससे जुड़ा होता है | मल्टीपल थ्रेड्स एक ही ऑब्जेक्ट को शेयर करते हैं |
| 4 | मेमोरी | अधिक मेमोरी की आवश्यकता होती है | कम मेमोरी की आवश्यकता होती है |
| 5 | सीमा | जावा में मल्टीपल इनहेरिटेंस अनुमत नहीं है, इसलिए Thread क्लास को एक्सटेंड करने के बाद क्लास किसी अन्य क्लास को एक्सटेंड नहीं कर सकती | यदि क्लास Runnable इंटरफेस इम्प्लीमेंट कर रही है तो आपकी क्लास दूसरी क्लास को एक्सटेंड कर सकती है |
Runnable का उदाहरण
class RunnableExample implements Runnable {
public void run() {
System.out.println("Runnable इम्प्लीमेंटेशन के लिए थ्रेड चल रहा है");
}
public static void main(String args[]) {
RunnableExample runnable = new RunnableExample();
Thread t1 = new Thread(runnable);
t1.start();
}
}
Thread का उदाहरण
class ThreadExample extends Thread {
public void run() {
System.out.println("थ्रेड चल रहा है");
}
public static void main(String args[]) {
ThreadExample t1 = new ThreadExample();
t1.start();
}
}
बेस्ट प्रैक्टिस
Runnable इंटरफेस को प्राथमिकता दें क्योंकि:
- यह कम्पोजिशन को सपोर्ट करता है (इनहेरिटेंस के बजाय)
- क्लास किसी अन्य क्लास को एक्सटेंड कर सकती है
- एक ही रननेबल इंस्टेंस को मल्टीपल थ्रेड्स के साथ शेयर किया जा सकता है
- यह फंक्शनल इंटरफेस है, इसलिए लैम्ब्डा एक्सप्रेशन के साथ उपयोग किया जा सकता है