दिलचस्प पोस्ट
सीएसएस के साथ लहर आकार एसवीजी के चाप पथ के साथ सर्कल ड्राइंग मेवेन सॉलिफायर का उपयोग करते हुए निर्भरता जार में ज्यूनेट टेस्ट चलाएं "उदार" का क्या उपयोग है? जावास्क्रिप्ट Object.defineProperty का उपयोग कैसे करें PHP में stdClass क्या है? सभी PHP त्रुटियों को आउटपुट करने के लिए नहीं, त्रुटि_ लॉग इन डेटाबेस अपने एपीआई का उपयोग करके एक मूल मेलचिप साइनअप फ़ॉर्म बनाएं पायथन में लोकेल दिनांक स्वरूपण क्या शॉर्ट सर्किट मूल्यांकन की गारंटी सी ++ में है क्योंकि यह जावा में है? तिथि पिकर के लिए एंड्रॉइड कैलेंडर दृश्य क्या मैं बीओएम के बिना यूटीएफ -8 के साथ एक्सल डेटा निर्यात कर सकता हूं? आधिकारिक तरीका कुछ पूछने के लिए jQuery को सभी छवियों को लोड करने से पहले लोड करने के लिए प्रतीक्षा करें ऐप में आईफ़ोन पर यूट्यूब वीडियो सहेजें 400 बैड अनुरोध HTTP त्रुटि कोड अर्थ है?

Thread.start () और Thread.run () के बीच अंतर क्या है?

हम start() विधि को क्यों कॉल करते हैं, जो बदले में run() विधि को कॉल करते run() ?
हम सीधे run() लिए कॉल नहीं कर सकते run() ?

कृपया एक उदाहरण दें जहां एक अंतर है

Solutions Collecting From Web of "Thread.start () और Thread.run () के बीच अंतर क्या है?"

नहीं, आप नहीं कर सकते कॉलिंग रन रन () विधि को एक ही थ्रेड में निष्पादित करेगा, नए थ्रेड को प्रारंभ किए बिना।

हम start() विधि को क्यों कॉल करते हैं, जो बदले में run() विधि को कॉल करते run() ?

ऐसा नहीं है कि दुर्भावनापूर्ण है start() बदले में रन विधि को कॉल नहीं करता है इसके बजाए यह धागा शुरू होता है जो रन विधि को निष्पादित करता है। यह मूल है

हम सीधे run() लिए कॉल नहीं कर सकते run() ?

अगर आप run() सीधे कॉल करते हैं तो आप थ्रेड को शुरू नहीं करते हैं, तो आप उसी कॉलर विधि पर विधि को निष्पादित करते हैं।

कृपया एक उदाहरण दें जहां एक अंतर है

वेब पर लाखों हैं इसलिए मैं डुप्लिकेट नहीं करता

वास्तव में thread.start() एक नया धागा बनाता है और इसका अपना निष्पादन परिदृश्य है।

लेकिन thread.run() कोई नया धागा नहीं बना रहा है, इसके बजाए वर्तमान चल रहे थ्रेड में रन विधि को निष्पादित करें।

तो दोस्तों, यदि आप thread.run() का उपयोग कर रहे हैं तो सोचें कि बहु-थ्रेडिंग का क्या उपयोग है यदि आप चाहते हैं कि केवल एक धागा सभी रन विधि निष्पादित करें

क्योंकि प्रारंभ () सिर्फ रन कॉल नहीं करता ()। यह एक नया धागा शुरू होता है और उस धागे कॉल में चलाता है ()।

आप रन () विधि सीधे चला सकते हैं। जब भी thread.start () का उपयोग कर अपना धागा प्रारंभ करते हैं, तो रन () विधि को कहा जाता है और आगे की कार्रवाई कर रहा है।

मुख्य अंतर यह है कि जब प्रोग्राम कॉल शुरू होता है () विधि एक नया थ्रेड बनाया जाता है और रन () विधि के अंदर कोड को नए थ्रेड में निष्पादित किया जाता है। यदि आप रन () विधि को सीधे कॉल करते हैं तो कोई नया थ्रेड नहीं बनाया जाता है और रन के अंदर कोड निष्पादित होता है मौजूदा थ्रेड पर

कॉल करने के बहुतेक समय () बुग या प्रोग्रामिंग गलती है क्योंकि कॉलर को नए धागा बनाने के लिए शुरू () कॉल करने का इरादा है और यह त्रुटि कई स्थिर कोड कवरेज टूल जैसे कि खोजबग्स का पता लगा सकता है। अगर आप समय से उपभोग कार्य करना चाहते हैं तो हमेशा कॉल शुरू करें () विधि अन्यथा आपका मुख्य थ्रेड समय लेने वाली कार्य करते समय फंस जाएगा यदि आप रन () विधि को सीधे कॉल करते हैं जावा थ्रेड में बनाम बनाम के बीच एक और अंतर यह है कि आप थ्रेड ऑब्जेक्ट पर दो बार शुरू () विधि कॉल नहीं कर सकते। एक बार शुरू होने पर, दूसरा कॉल शुरू करने के लिए () अवैध तरीके से जावा जावा में फंस जाएगा, जबकि आप रन () विधि को दो बार कॉल कर सकते हैं।

अगर आप कॉल () सीधे कॉल करते हैं, तो कोड कॉलिंग थ्रेड में निष्पादित हो जाता है। शुरू करने से कॉल (), एक नया धागा मुख्य थ्रेड के अलावा बनाया गया है और समानांतर में निष्पादित किया जाता है।

क्योंकि start(); सिंक्रनाइज़ और run(); सरल / नियमित विधि है जैसा कि जावा को main(); से शुरू होने वाले निष्पादन का पता चलता है main(); तरीका। चूंकि धागा को run(); से शुरू करने का पता लगता है run();

Thread क्लास से स्रोत कोड यहां दिया गया है:

run(); कोड:

 @Override public void run() { // overriding from Runnable if (target != null) { target.run(); } } 

start(); कोड:

 public synchronized void start() { /** * This method is not invoked for the main method thread or "system" * group threads created/set up by the VM. Any new functionality added * to this method in the future may have to also be added to the VM. * * A zero status value corresponds to state "NEW". */ if (threadStatus != 0) throw new IllegalThreadStateException(); /* Notify the group that this thread is about to be started * so that it can be added to the group's list of threads * and the group's unstarted count can be decremented. */ group.add(this); boolean started = false; try { start0(); started = true; } finally { try { if (!started) { group.threadStartFailed(this); } } catch (Throwable ignore) { /* do nothing. If start0 threw a Throwable then it will be passed up the call stack */ } } } 

छोटी start(); थ्रेड्स का प्रबंधक है, आदि का प्रबंधन करने और run(); धागा काम के बिंदु tarting है

यह प्रारंभिक विधि द्वारा किया गया काम है

 synchronized public void start() { //it calls start0() method internally and start0() method does below //create a real child thread and register with thread scheduler //create runtime stack for child thread //call run() on underlying Runtime object }