मैंने स्पष्टता के लिए नीचे दिए गए उदाहरण को सरल बना दिया, लेकिन मैं इसे लाइव उत्पादन कार्यक्रम में मिला और मैं नहीं देख सकता कि यह कैसे काम करेगा!जब मूल वर्ग गुंजाइश से बाहर हो जाता है तो धागे का क्या होता है
public class Test
{
static void Main()
{
Counter foo = new Counter();
ThreadStart job = new ThreadStart(foo.Count);
Thread thread = new Thread(job);
thread.Start();
Console.WriteLine("Main terminated");
}
}
public class Counter
{
public void Count()
{
for (int i = 0; i < 10; i++)
{
Console.WriteLine("Other thread: {0}", i);
Thread.Sleep(500);
}
Console.WriteLine("Counter terminated");
}
}
मुख्य दिनचर्या काउंटर थ्रेड शुरू करती है और मुख्य दिनचर्या समाप्त होती है। काउंटर थ्रेड निम्नलिखित आउटपुट देने पर ध्यान दिए बिना चलता है।
Main terminated
Other thread: 0
Other thread: 1
Other thread: 2
Other thread: 3
Other thread: 4
Other thread: 5
Other thread: 6
Other thread: 7
Other thread: 8
Other thread: 9
Counter terminated
मेरा उदाहरण प्रोग्राम दर्शाता है कि हालांकि कॉलिंग क्लास अब मौजूद नहीं है, धागा पूरा होने तक जीवित रहता है। हालांकि, मेरी समझ यह है कि एक बार कक्षा एक गुंजाइश से बाहर हो जाने के बाद, इसके संसाधन अंततः कचरे के संग्रह से जुड़े रहेंगे।
मेरे वास्तविक जीवन परिदृश्य में, थ्रेड एक विशाल ईमेलिंग 1-2 घंटे तक चल रहा है। मेरा सवाल है "क्या कचरा संग्रह अंततः धागे को मार देगा या जीसी को पता चलेगा कि धागा अभी भी प्रसंस्करण कर रहा है"? क्या मेरा ईमेलिंग थ्रेड हमेशा पूरा होने के लिए चलाएगा या क्या कोई खतरा है जो असामान्य रूप से समाप्त हो जाएगा?
* हालांकि, मेरी समझ यह है कि एक बार कक्षा एक गुंजाइश से बाहर हो जाने के बाद, इसके संसाधन अंततः कचरे के संग्रह से जुड़े रहेंगे। * थ्रेड एक विशेष मामला है ... वे 'थ्रेड' ऑब्जेक्ट्स को "अंदर" रखते हैं, 'थ्रेड.कुरेंट थ्रेड', ** और ** में उनकी वर्तमान चलती विधि को जीसी रूट माना जाता है (इसलिए जीसी के लिए एक प्रारंभिक बिंदु यह पता लगाने के लिए कि क्या किसी ऑब्जेक्ट में अभी भी संदर्भ हैं) ... लेकिन हाँ, यह एक है परिपत्र तर्क। – xanatos
कक्षाएं दायरे से बाहर नहीं जाती हैं। वस्तुएं दायरे से बाहर नहीं जाती हैं। वेरिएबल्स गुंजाइश से बाहर निकलते हैं (जो समझने में आसान है - इसका मतलब यह है कि वेरिएबल अब मौजूद नहीं है। यदि चर एक संदर्भ है, तो यह उस ऑब्जेक्ट को कुछ भी नहीं करता है जो इसे संदर्भित करता है)। – immibis