Difference between Thread.start() and Thread.run() method in Java in Hindi?
यदि आपको याद है, जावा में start() पद्धति को java.lang.Thread क्लास कहकर एक थ्रेड शुरू किया गया है, लेकिन यदि आप अधिक सीखते हैं, तो आपको पता चलेगा कि start()विधि आंतरिक रूप से run() रननेबल इंटरफ़ेस की विधि को कॉल करती है
अलग थ्रेड में run () विधि में निर्दिष्ट कोड निष्पादित करें। अब सवाल यह है कि, आप start() विधि को कॉल करने के बजाय run () पद्धति को क्यों नहीं कह सकते?
चूंकि start(),run() को कॉल कर रहा है वैसे भी, कॉलिंग रन का सीधा प्रभाव कॉलिंग के समान होना चाहिए, नहीं?
खैर, यह मुश्किल java multithreading interview questions में से एक है जो आपको java interview question पर मिलेगा और यह आसान नहीं है क्योंकि यह दिखता है, खासकर यदि आपको java threads के बारे में आधा ज्ञान है।
यहां ट्रिक यह है कि जब आप run () विधि को सीधे कॉल करते हैं तो run () विधि के अंदर कोड को उसी थ्रेड में निष्पादित किया जाता है जो run method को कॉल करता है।
JVM तब तक एक नया सूत्र नहीं बनाएगा जब तक आप प्रारंभ विधि को कॉल नहीं करते।
दूसरी तरफ, जब आप Thread.start() method को कॉल करते हैं, तो run() विधि को एक नए थ्रेड पर निष्पादित किया जाएगा, जो वास्तव में start() विधि द्वारा बनाई गई है।
याद रखने के लिए शुरू और चलाने की विधि के बीच एक और महत्वपूर्ण अंतर यह है कि आप रन विधि को कई बार कॉल कर सकते हैं, जेवीएम किसी भी त्रुटि को नहीं फेंकेगा लेकिन जब आप एक ही thread उदाहरण पर start() method को कॉल नहीं कर सकते।
पहली बार, t.start () एक नया थ्रेड बनाएगा, लेकिन दूसरी बार यह java.lang.IllegalStateException को फेंक देगा, क्योंकि थ्रेड पहले ही शुरू हो चुका है और आप इसे फिर से शुरू नहीं कर सकते, आप केवल जावा में एक थ्रेड को रोक सकते हैं। एक बार जब यह मर गया तो यह चला गया।
Difference between start() and run() method of Thread class in java in hindi
Run () विधि रननेबल इंटरफ़ेस से आती है लेकिन start () method केवल थ्रेड क्लास में घोषित की जाती है।
चूंकि java.lang.Thread क्लास इम्प्लीमेंट रनवेबल इंटरफेस है, आप थ्रेड क्लास के इंस्टेंस से run () विधि का उपयोग कर सकते हैं।
मैंने आपको थ्रेड पर कॉलिंग start () विधि और मुख्य थ्रेड से run () विधि को कॉल करने के अंतर को प्रदर्शित करने के लिए जावा प्रोग्राम के बाद बनाया है।
याद रखें, दोनों स्थितियों में run () विधि को कहा जाएगा लेकिन जब आप start () विधि को कॉल करेंगे तो इसे एक नए थ्रेड द्वारा बुलाया जाएगा।
दूसरी ओर, यदि आप run () विधि को सीधे कॉल करते हैं, तो इसे उसी थ्रेड पर बुलाया जाएगा यानी हमारे मामले में मुख्य थ्रेड।
विश्वास नहीं होता? कोड चलाएं और स्वयं देखें। अब उदाहरण देखते हैं।
/** * Java Program to demonstrate the difference between run() vs start() method of * Thread class in Java. Just remember that when you directly call the run() * method, code written inside the run() method will be executed in the calling * thread, but when you call the start() method then a new thread will be * created to execute the code written inside run() method in Java. * * @author WINDOWS 8 * */ public class HelloWorldApp { public static void main(String args[]) { Thread t = new Thread() { @Override public void run() { System.out.println(Thread.currentThread().getName() + " is executed the run() method"); } }; System.out.println( Thread.currentThread().getName() + " Calling the start() method of Thread"); t.start(); // let's wait until the thread completes execution try { t.join(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println( Thread.currentThread().getName() + " Calling the run() method of Thread"); t.run(); } }
Threads in Java in hindi |
आप स्पष्ट रूप से देख सकते हैं कि जब हमारा main thread (main() method in Javaको निष्पादित करने वाला thread)start() को कॉल करता है
थ्रेड नाम के साथ एक नए thread की तुलना में विधि बनाई जाती है और run () विधि उस thread द्वारा निष्पादित की जाती है, लेकिन अगर आप सीधे जावा में एक ही main thread पर इसके निष्पादन की तुलना में run () विधि कहते हैं।
difference between start() and run() method in Java in Hindi के बारे में सब कुछ है। बस याद रखें कि भले ही start () विधि आंतरिक रूप से run() विधि को बुलाती है, इसका मुख्य उद्देश्य एक नया thread बनाना है।
यदि आप सीधे run () method को कॉल करते हैं, तो रन के बजाय एक नया थ्रेड नहीं बनाया जाएगा उसी थ्रेड पर निष्पादित होगा। इसका मतलब है कि आपको हमेशा जावा में Thread.start() विधि को कॉल करके शुरू करना चाहिए।
0 Comments