2015-02-15 9 views
8

Thread.currentThread()स्थिर विधि है जो वर्तमान में थ्रेड निष्पादित करने के संदर्भ प्रदान करता है (मूल रूप से 'इस' धागे का संदर्भ)।Thread.currentThread() कैसे काम करता है?

गैर स्थैतिक सदस्यों (विशेष रूप से this) तक पहुंचना एक स्थिर विधि के अंदर जावा में संभव नहीं है, इसलिए currentThread() एक मूल विधि है।

currentThread() दृश्यों के पीछे विधि कैसे काम करता है?

+0

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

+2

मुझे 'वर्तमान थ्रेड' के कार्यान्वयन विवरण के बारे में पता नहीं है, लेकिन यदि आप अपने कोड में समान सामान्य यांत्रिकी का उपयोग करना चाहते हैं तो आप 'थ्रेडलोकल' का उपयोग कर सकते हैं। – duckstep

+0

बहुत अच्छा सवाल है। विशेष रूप से, क्या ऑब्जेक्ट _currentThread() _ द्वारा वापस किया गया ऑब्जेक्ट हमेशा 'थ्रेड' ऑब्जेक्ट जैसा होता है जो ** थ्रेड ** शुरू करने के लिए उपयोग किया जाता है? क्या यह एक ही ** थ्रेड ** के लिए दो 'थ्रेड' ऑब्जेक्ट्स बना सकता है? क्या मूल कार्य एक ** थ्रेड ** बना सकता है और जावा कोड का आह्वान कर सकता है? ऐसे ** धागे ** के लिए क्या 'थ्रेड' ऑब्जेक्ट वापस किया जाएगा? – 18446744073709551615

उत्तर

5
(basically a reference to 'this' thread) 

गलत। यहां शामिल this संदर्भ नहीं हैं।

आप एक देशी संसाधन के रूप में एक धागा अप मिश्रण कर रहे हैं, निष्पादन की धागा अर्थ; और Thread, जो एक जावा क्लास है। थ्रेड कोड Thread इंस्टेंस के अंदर "अंदर" नहीं चला है, यह उदाहरण जावा के थ्रेड नियंत्रण में आपका हैंडल है। File उदाहरण की तरह एक फ़ाइल नहीं है।

तो, Thread.currentThread() आपके लिए Thread के उदाहरण को थ्रेड-ऑफ-निष्पादन के प्रभारी के रूप में पुनर्प्राप्त करने का एक तरीका है जिसमें विधि कहा जाता है। जावा वास्तव में यह एक कार्यान्वयन विवरण है जो आपकी चिंता नहीं होनी चाहिए जब तक कि आप किसी विशेष JVM कार्यान्वयन के विवरण की खोज नहीं कर लेते।

+0

यह एक आदर्श सादृश्य नहीं है, क्योंकि फ़ाइल इंस्टेंस एक ऐसा पथ है जो अपने जीवनकाल के दौरान कई वास्तविक ओएस-स्तरीय फ़ाइलों को हल कर सकता है, जबकि थ्रेड इंस्टेंस केवल अपने जीवनकाल के दौरान एक ही थ्रेड का प्रतिनिधित्व करता है। लेकिन हैंडल के रूप में थ्रेड उदाहरणों का विचार ध्वनि है। –

+0

@ जेफरी बॉसबूम 'थ्रेड' के जीवन चक्र और अंतर्निहित थ्रेड के बीच मेल नहीं मिला, हालांकि यह समानता मजबूत है। 'थ्रेड' निष्पादन के अंतर्निहित धागे के बिना (और करता है) मौजूद हो सकता है --- और वास्तव में विभिन्न समय पर आसानी से विभिन्न ओएस-स्तर धागे का प्रतिनिधित्व कर सकता है (जो वास्तव में विनिर्देश की पहुंच से परे है)। –

+0

@ मार्को कहते हैं कि मैं यहां विवरणों की खोज कर रहा हूं, क्या आप वर्तमान थ्रेड() विधि के स्रोत को ढूंढने में मेरी सहायता कर सकते हैं? मैं वास्तव में देखना चाहता हूं कि इस विधि के अंदर वास्तव में क्या चल रहा है। – maximus335

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