2012-05-15 12 views
5

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

मेरा सवाल है, अगर मैंने प्रत्येक अनुरोध के लिए थ्रेडलोकल चर को साफ़ नहीं किया है, तो क्या होगा? प्रभाव क्या हैं?

उत्तर

2

यदि धागा मर जाता है, तो थ्रेडलोकल प्रविष्टि का संदर्भ भी है और इसलिए आपकी वस्तु (मान लीजिए कि कोई अन्य संदर्भ नहीं है) कचरा इकट्ठा किया जाएगा।

जब तक धागा रहता है, तो आपकी वस्तु भी होती है।

आपको यह आकलन करना होगा कि आपके ऑब्जेक्ट का दीर्घकालिक प्रभाव क्या है।

+0

आपकी प्रतिक्रिया के लिए धन्यवाद बोहेमियन। तो अगले अनुरोध की सेवा करते समय, मुझे थ्रेडलोकल (पिछले अनुरोध के पुराने) से पुराना मान नहीं मिलेगा .. अनुष्ठान? – Shahul

+0

हाँ, मुझे लगता है कि आप करेंगे, क्योंकि सर्वर थ्रेड का पुन: उपयोग करते हैं। – keuleJ

0

आपके पास मेमोरी रिसाव है और अगली बार आपके कोड को कॉल होने पर थ्रेडलोकल पहले ही सेट हो सकता है। थ्रेडलोकल्स कोड गंध इमो का थोड़ा सा हिस्सा हैं।

9

जावाडोक का कहना है:

के बाद एक धागा दूर चला जाता है, धागे की स्थानीय उदाहरणों के अपने प्रतियां के सभी कचरा संग्रहण के अधीन हैं (जब तक इन प्रतियां अन्य संदर्भ मौजूद हैं)।

उदाहरण के लिए, यहाँ the implementation एक HashTable कुंजी के लिए weak references का उपयोग करता है के द्वारा समर्थित है। इस मामले में, कुंजी धागा है। यदि धागा समाप्त हो जाता है, तो नक्शा में प्रवेश कचरा संग्रह के लिए योग्य हो जाता है।

कचरा colleciton तभी हो सकता है जब सिस्टम स्मृति स्थान से बाहर चलना शुरू हो। लेकिन यह विचार सिस्टम में सभी वस्तुओं पर लागू होता है: जब वस्तुएं पुनः दावा की जा रही हैं तो जीसी नीति पर निर्भर करती है, जो वीएम निर्दिष्ट है और ट्यूनिंग के अधीन है।

  • यह अच्छा OT उपयोग धागा स्थानीय लोगों है अगर बिंदु संगामिति मुद्दे के समाधान के लिए है:

    यह धागा स्थानीय लोगों के अच्छे और बुरे उपयोग के मेरे विचार है। उदाहरण के लिए, an object that is not thread-safe by keeping one copy per thread के सिंक्रनाइज़ेशन से परहेज करें। या समेकन से संबंधित अन्य डिजाइन मुद्दे को संबोधित करने के लिए।

  • यह खराब है यदि बिंदु एक सस्ते तरीके से कॉल श्रृंखला के नीचे "पैरामीटर पास" करना है। आपको अपने कोड को बेहतर रिफैक्टर करना चाहिए और ऑब्जेक्ट को नियमित श्रृंखला पैरामीटर के रूप में कॉल श्रृंखला के नीचे पास करना चाहिए।

  • यह "वर्तमान" संदर्भ, उदा के कुछ फार्म स्टोर करने के लिए धागा स्थानीय उपयोग के लिए ठीक है वर्तमान अनुरोध

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