2013-07-16 10 views
20

मेरे शिक्षक ने मुझे बताया कि मुख्य धागा हर धागे का मूल धागा है, लेकिन वह समझाने में सक्षम नहीं है।जावा में मुख्य() विधि और मुख्य धागे के बीच संबंध क्या है?

जब मैं एक साधारण प्रोग्राम लिखने:

java.lang.NoSuchMethodError: main Exception in thread "main" 

वहाँ main() विधि और मुख्य थ्रेड के बीच कोई संबंध है: तो फिर यह निष्पादन के समय

Class A{} 

यह एक अपवाद फेंकता है?

+3

आपका शिक्षक गलत है। जावा धागे के बीच कोई अभिभावक-बाल संबंध नहीं है। – EJP

+0

बेशक, थ्रेड मुख्य एप्लिकेशन की शुरुआत है, जेवीएम एक [थ्रेड (मुख्य)] बनाता है (http://www.codeproject.com/Articles/616109/Java- थ्रेड- ट्यूटोरियल#maintr) और स्थिर मुख्य कॉल करें इसके द्वारा कक्षा –

+5

@EJP: "गलत" कठोर है। जबकि धागे उस रिश्ते को नहीं लेते हैं, यह कहा जा सकता है कि सभी उपयोगकर्ता धागे मुख्य धागे से उत्पन्न होते हैं (प्रत्यक्ष या परोक्ष रूप से)। – Thilo

उत्तर

37

क्या मुख्य() विधि और मुख्य थ्रेड के बीच कोई संबंध है?

जब JVM प्रारंभ होता है, तो यह "मुख्य" नामक धागा बनाता है। आपका प्रोग्राम इस धागे पर चलेगा, जब तक कि आप अतिरिक्त धागे स्वयं नहीं बनाते।

पहली बात यह है कि "मुख्य" धागा आपके static void main(String[] argv) विधि को देखने और इसे आमंत्रित करने के लिए है। यह आपके कार्यक्रम के लिए प्रवेश बिंदु है।

यदि आप चीजें "एक ही समय में" होने की इच्छा रखते हैं, तो आप कई धागे बना सकते हैं, और प्रत्येक को निष्पादित करने के लिए कुछ दे सकते हैं। फिर वे इन चीजों को एक साथ करना जारी रखेंगे। JVM भी कचरा संग्रह जैसे पृष्ठभूमि कार्यों के लिए कुछ आंतरिक धागे बनाता है।

+2

यदि पहली चीज़ "_Main_" थ्रेड करना है 'स्थिर शून्य मुख्य (स्ट्रिंग तर्क [])' तो फिर कैसे करें ** स्थिर ब्लॉक ** पहले कैसे चलता है। –

+9

इस प्रकार वर्ग लोडिंग काम करता है। एक नई कक्षा पर एक विधि का आह्वान करने का प्रयास करें, और यह कक्षा को लोड करेगा और इसे प्रारंभ करेगा (स्थिर प्रारंभिक प्रारंभकर्ता ब्लॉक सहित)। वहां "मुख्य" के बारे में कुछ खास नहीं है। – Thilo

+0

@java_begin - मुख्य विधि के बिना, आप प्रोग्राम नहीं चला सकते हैं, इसलिए कोई स्थिर निष्पादन नहीं। –

9

सबसे पहले Main Thread is a parent thread of every thread संदिग्ध है। Process के विपरीत, जावा थ्रेड में माता-पिता और बच्चे की कोई अवधारणा नहीं है। आपके पास समूह थ्रेड के लिए ThreadGroups है और उसके बाद बच्चे समूह हैं, लेकिन यह Process से अलग है, इस अर्थ में कि यदि माता-पिता मर जाते हैं, तो बच्चा अभी भी बना रहता है।

main थ्रेड वह थ्रेड है जो आपके प्रोग्राम को शुरू करता है, या बस आपके public static void main(String... args) विधि को चलाता है।

संबंधित मुद्दे