तो मैं एक खेल के लिए धागे के साथ काम करने की कोशिश कर रहा हूं। मैं बहुत विषय के लिए नया हूं इसलिए मैं सही ढंग से समझ नहीं पा रहा हूं। मेरा सवाल यह है कि जावा एपीआई की थ्रेड क्लास में currentThread() विधि कैसे काम करती है। एपीआई कहता है "वर्तमान में निष्पादित थ्रेड ऑब्जेक्ट का संदर्भ देता है।", लेकिन जहां तक मैं एक ही समय में कई धागे चलाता हूं। केवल एक निष्पादन धागा वापस करना संभव है?वर्तमान थ्रेड विधि जावा
उत्तर
currentThread
पर कॉल करने वाले कोड को थ्रेड में से एक में निष्पादित किया जाएगा, न कि उनमें से सभी में, इसलिए यह उस धागे को विशेष रूप से प्राप्त कर सकता है।
धन्यवाद जो इसे बहुत स्पष्ट बनाता है। – user1427380
जब आपके कोड में कोई निर्देश निष्पादित होता है, तो इसे किसी विशिष्ट थ्रेड के भीतर निष्पादित किया जाता है। यह उस विधि द्वारा लौटा धागा है।
जाहिर है, यदि एकाधिक थ्रेड द्वारा एक विशिष्ट विधि निष्पादित की जाती है, तो प्रत्येक निष्पादन Thread.currentThread()
के लिए एक अलग मान वापस कर सकता है।
आप इस छोटे से उदाहरण का प्रयास कर सकते हैं कि क्या हो रहा है और विशेष रूप से तथ्य यह है कि 2 धागे समानांतर में निष्पादित होते हैं। आप यह देखना चाहिए कि t1 कुछ पाश चलेंगे तो t2 T1 के लिए आदि भी ऐसा ही करने और वापस होगा (आप अपने मशीन के आधार पर एक उच्च संख्या 5 से छोरों की संख्या बढ़ाने की आवश्यकता हो सकती है):
public class TestThread {
public static void main(String[] args) {
Runnable r = new Runnable() {
@Override
public void run() {
for (int i = 0; i < 5; i++) {
System.out.println(Thread.currentThread());
}
}
};
Thread t1 = new Thread(r, "t1");
Thread t2 = new Thread(r, "t2");
t1.start();
t2.start();
}
}
आपको वर्तमान थ्रेड को लूप में प्रिंट करने की आवश्यकता क्यों होगी? एक बार पर्याप्त होना चाहिए, मुझे लगता है। – Jeffrey
मुझे आपके पहले 2 वाक्यों को पसंद है ... लेकिन शेष पोस्ट, विशेष रूप से कोड, भ्रामक होने के लिए पर्याप्त अस्पष्ट लगता है। – goat
@ जेफरी का विचार कुछ इंटरलिविंग दिखाना था जहां एक थ्रेड दो बार लूप चला सकता है, दूसरा दूसरा सक्रिय हो जाता है। – assylias
"वर्तमान में निष्पादित थ्रेड" का अर्थ है कि सिस्टम शेड्यूलर ने इस कोड को अपने कोड को निष्पादित करने के लिए कुछ समय दिया है।
एकाधिक थ्रेड एक ही समय में नहीं चल रहे हैं और कई धागे के बीच थ्रेड स्विचिंग है। प्रोसेसर एक समय में एक कार्य निष्पादित कर सकता है ताकि एक थ्रेड निष्पादित समय पर हो। तो हम वर्तमान में चल रहे थ्रेड का संदर्भ प्राप्त करते हैं।
मल्टीकोर मशीनें वास्तव में एक बार में कई धागे चलाती हैं। मुझे एक कोर-मशीन पर काम करने वाले बड़े पैमाने पर बहुसंख्यक प्रोग्राम (अत्यधिक इंटरैक्टिव धागे के साथ) मिला, फिर इसे 4 कोर वाले मशीन पर ले जाया गया। वह एक असली शिक्षा थी। – RalphChapin
"एकाधिक थ्रेड एक ही समय में _neccessly_ चल रहे नहीं हैं ..." – jdv
मान लें कि आपके पास कागज के टुकड़े पर मुद्रित निर्देशों की सूची है। एक व्यक्ति निर्देश पढ़ता है और उन्हें निष्पादित करता है। निर्देश एक कार्यक्रम हैं। व्यक्ति एक धागा है। आप कागज की कई प्रतियां बना सकते हैं और उन्हें कई लोगों तक पहुंचा सकते हैं। अगर निर्देश कुछ कहते हैं, "खुद को थप्पड़ मारो," स्वयं उस व्यक्ति से उस निर्देश को पढ़ रहा है। इसी तरह, Thread.currentThread()
उस थ्रेड को संदर्भित करता है जो उस कॉल को currentThread()
पर निष्पादित कर रहा है।
एक थ्रेडेड एप्लिकेशन लिखते समय, आप अपने प्रोग्राम पर निर्देश की एक श्रृंखला की तरह तर्क कर सकते हैं, प्रत्येक पिछले के बाद निष्पादित किया गया है (यह एक अनुमानित अनुमान है, लेकिन अवधारणात्मक संकलक और प्रोसेसर इसे अनुकरण करने और काम करने की कोशिश करता है अगर यह वास्तव में क्या हो रहा था)।
जब आप एकाधिक धागे का उपयोग करते हैं, तो प्रत्येक थ्रेड की अपनी स्वयं की श्रृंखला होती है। बनाए जाने पर एक नया धागा एक प्रविष्टि बिंदु (एक विधि) पारित किया जाता है, और उनसे निष्पादन जारी रहेगा। प्रत्येक धागा अन्य निष्पादन में अन्य धागे से स्वतंत्र होता है (यह केवल दूसरे के बाद एक निर्देश निष्पादित करेगा), हालांकि वे स्मृति साझा करते हैं और इस प्रकार एक थ्रेड से दुष्प्रभाव दूसरे को प्रभावित कर सकता है।
तो कुछ कोड निष्पादित करने के लिए, यह एक थ्रेड के संदर्भ में किया जाना चाहिए (आपके एप्लिकेशन को शुरू होने पर ऑपरेटिंग सिस्टम द्वारा बनाया गया एक है, जो Main
विधि पर इसके निष्पादन को शुरू करता है)। जब फ़ंक्शन currentThread
कहा जाता है, तो यह उन संदर्भों में से एक में है।
धागा बनाने के दौरान जावा रनटाइम थ्रेड संदर्भ में उस Thread
ऑब्जेक्ट का संदर्भ संग्रहीत करेगा, और currentThread
बस वहां देखेगा और वर्तमान धागे को वापस कर देगा।
किसी भी समय दिए गए बिंदु पर, केवल एक धागा निष्पादित होगा (लाइव), इसलिए Thread.currentThread()
वर्तमान में निष्पादित थ्रेड का विवरण देता है। उदाहरण के लिए, थ्रेड_नाम, प्राथमिकता, method_name।
- 1. वर्तमान जावा थ्रेड
- 2. वर्तमान विधि कॉल की थ्रेड आईडी प्राप्त करना
- 3. जेएमटर वर्तमान थ्रेड संख्या?
- 4. थ्रेड। जावा
- 5. जावा थ्रेड
- 6. थ्रेड डंप विश्लेषण उपकरण/विधि
- 7. जावा थ्रेड अपवाद
- 8. क्यों execorService.shutdownNow विधि थ्रेड
- 9. थ्रेड स्थानीय निकालने विधि
- 10. थ्रेड जावा
- 11. जावा थ्रेड बनाम ओएस थ्रेड
- 12. जावा थ्रेड में प्रतीक्षा और अधिसूचना विधि को कैसे समझें?
- 13. जावा में मुख्य विधि को थ्रेड क्यों निकाला जाता है?
- 14. जावा थ्रेड: रन विधि चेक अपवाद फेंक नहीं सकता
- 15. मल्टी-थ्रेड को स्केलेबल विधि
- 16. जावा XPathFactory थ्रेड-सुरक्षा
- 17. जावा स्थैतिक विधि घोषणा में वर्तमान वर्ग का उपयोग
- 18. प्रोग्राम की वर्तमान स्थिति को सहेजने के लिए जावा विधि
- 19. जावा थ्रेड पूल
- 20. जावा थ्रेड ब्लॉक। क्या करें?
- 21. विधि जावा
- 22. जावा जबकि लूप और थ्रेड!
- 23. जावा कैश्ड थ्रेड पूल और थ्रेड स्थानीय
- 24. जावा स्विंग वर्कर थ्रेड ईडीटी
- 25. वर्तमान संस्कृति क्यों थ्रेड की संपत्ति है?
- 26. थ्रेड-सुरक्षित प्राप्त करें (एक्सेसर विधि)
- 27. जावा में थ्रेड सेफ सिंगलेट्स
- 28. जावा में थ्रेड
- 29. जावा सरणी थ्रेड-सुरक्षा
- 30. जावा में थ्रेड पूल
आपको थ्रेडिंग के बारे में कुछ ट्यूटोरियल पढ़ना चाहिए। – Sajmon
मुझे लगता है कि उन्हें इसे नामित करना चाहिए था (स्वयं) या ऐसा कुछ, क्योंकि मल्टीकोर सीपीयू के साथ वर्तमान में एक से अधिक थ्रेड निष्पादित हो सकता है। – goat