वैचारिक रूप से इसका क्या अर्थ है जब यह कहा जाता है कि प्रत्येक धागे का अपना ढेर होता है?


10

मैं ब्रायन गोएट्ज द्वारा अभ्यास में जावा कॉनएरेमेन्ट पढ़ रहा हूं और अनुभाग स्टैक कंफाइनमेंट के अंदर यह उल्लेख किया गया है कि प्रत्येक थ्रेड का अपना स्टैक होता है और इसलिए स्थानीय चर आंतरिक रूप से निष्पादित थ्रेड तक सीमित होते हैं; वे निष्पादित थ्रेड्स स्टैक पर मौजूद हैं, जो अन्य थ्रेड्स तक पहुँच योग्य नहीं है। उसका क्या मतलब है कि प्रत्येक धागे का अपना निष्पादन स्टैक है?


4
इस पर गहरी समझ के लिए, स्टैक पॉइंटर रजिस्टर को देखें और विधानसभा में इसका उपयोग कैसे किया जाता है। यह बताएगा कि कैसे धागे आसानी से अपने स्वयं के ढेर हो सकते हैं।
पीटर स्मिथ

1
पीटर स्मिथ से सहमत। इसमें समय लग सकता है, लेकिन बाद में आपको इस बात की पूरी जानकारी हो जाती है कि क्या, कैसे और क्यों चल रहा है
SuperM

जवाबों:


13

आप जानते हैं कि जब भी आप किसी भी कारण से डिबगर पर जाते हैं, और आईडीई आपको स्टैक ट्रेस देता है? और प्रत्येक विधि (स्टैक फ्रेम) के पास स्थानीय चर का अपना सेट है जिसे आप डिबगर में जांच सकते हैं?

यह आपके प्रोग्राम का "निष्पादन स्टैक" है। यह दिखाता है कि इस समय आपके कार्यक्रम की स्थानीय स्थिति क्या है। लेखक जो कह रहा है, वह यह है कि प्रत्येक धागे का अपना अलग निष्पादन स्टैक होता है। इसकी अपनी कॉल स्टैक है, और प्रत्येक विधि के अपने स्थानीय चर हैं।

क्योंकि चर निष्पादन स्टैक के भाग के रूप में संग्रहीत होते हैं और ढेर में नहीं होते हैं, वे उस थ्रेड के लिए विशिष्ट होते हैं जिसे चलाया जा रहा है और सीधे साझा नहीं किया जा सकता है। आप उन्हें कॉपी कर सकते हैं, या विभिन्न तरीकों से अन्य थ्रेड्स के लिए ऑब्जेक्ट्स के संदर्भों को पास कर सकते हैं, हालांकि, यह ज्यादातर शैक्षणिक अंतर है।


कृपया जोड़ने के एक और भी मजबूत है कि कर रहे हैं कि स्थानीय चर राज्य के लिए अपने तीसरे पैराग्राफ को जोर से अवगत कराया अन्य धागे या लंबी रहने वाले वस्तुओं के लिए अब तक ही सीमित कर दिया जाएगा। इस प्रकार, ओपी की पुस्तक से उद्धृत दावा बहुत संदिग्ध है।
रवांग

4
@rwong: एक स्थानीय थ्रेड को दूसरे थ्रेड iin में एक्सपोज़ करना असंभव है, जो समस्याग्रस्त होगा। चर में केवल आदिम या संदर्भ होते हैं। वस्तुएं ढेर पर रहती हैं।
माइकल बोर्गवर्ड

@MichaelBorgwardt दो मामलों को अलग-अलग ले जाने का कहना है कि चर में एक आदिम होता है जो कि मामला ए है और यह कहता है कि चर में एक संदर्भ है जो कि मामला बी है। चूंकि प्राइमिटिव्स मूल्य द्वारा पारित किए जाते हैं, स्थानीय चर वास्तव में थ्रेड सुरक्षित होते हैं लेकिन संदर्भ के बारे में क्या। वे चारों ओर पारित किया जा सकता है? आप यह क्यों कहते हैं कि यह असंभव है?
गीक

2
@ गीक: क्योंकि चर और वस्तु यह दो अलग-अलग और अलग-अलग चीजें हैं जो विस्तार के इस स्तर पर बात करते समय भ्रमित नहीं होनी चाहिए। एक स्थानीय चर को एक अलग धागे से उजागर नहीं किया जा सकता है। वस्तु निश्चित रूप से कर सकते हैं।
माइकल बॉर्गवर्ड

@MichaelBorgwardt मैं देख रहा हूँ कि आप क्या कह रहे हैं। स्पष्टीकरण के लिए धन्यवाद।
गीक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.