स्थिर निर्माता होगा खत्म चल रहा से पहले किसी भी धागा वर्ग का उपयोग करने की अनुमति दी है।
private class InitializerTest
{
static private int _x;
static public string Status()
{
return "_x = " + _x;
}
static InitializerTest()
{
System.Diagnostics.Debug.WriteLine("InitializerTest() starting.");
_x = 1;
Thread.Sleep(3000);
_x = 2;
System.Diagnostics.Debug.WriteLine("InitializerTest() finished.");
}
}
private void ClassInitializerInThread()
{
System.Diagnostics.Debug.WriteLine(Thread.CurrentThread.GetHashCode() + ": ClassInitializerInThread() starting.");
string status = InitializerTest.Status();
System.Diagnostics.Debug.WriteLine(Thread.CurrentThread.GetHashCode() + ": ClassInitializerInThread() status = " + status);
}
private void classInitializerButton_Click(object sender, EventArgs e)
{
new Thread(ClassInitializerInThread).Start();
new Thread(ClassInitializerInThread).Start();
new Thread(ClassInitializerInThread).Start();
}
ऊपर दिए गए कोड ने नीचे के परिणाम तैयार किए।
10: ClassInitializerInThread() starting.
11: ClassInitializerInThread() starting.
12: ClassInitializerInThread() starting.
InitializerTest() starting.
InitializerTest() finished.
11: ClassInitializerInThread() status = _x = 2
The thread 0x2650 has exited with code 0 (0x0).
10: ClassInitializerInThread() status = _x = 2
The thread 0x1f50 has exited with code 0 (0x0).
12: ClassInitializerInThread() status = _x = 2
The thread 0x73c has exited with code 0 (0x0).
भले ही स्थिर कंस्ट्रक्टर को चलने में लंबा समय लगा हो, लेकिन अन्य थ्रेड रुक गए और इंतजार करने लगे। सभी थ्रेड स्थिर कंस्ट्रक्टर के निचले भाग में सेट _x का मूल्य पढ़ते हैं।
Instance
एक ही बार में संपत्ति प्राप्त करना चाहते हैं । थ्रेड्स में से एक को पहले टाइप इनिशियलाइज़र (जिसे स्टैटिक कंस्ट्रक्टर के रूप में भी जाना जाता है) चलाना होगा। इस बीच अन्य सभी सूत्रInstance
संपत्ति को पढ़ना चाहते हैं, जब तक कि टाइप इनिशियलाइज़र समाप्त नहीं हो जाता है तब तक लॉक रहेगा। फ़ील्ड इनिशियलाइज़र के समापन के बाद ही, थ्रेड्स कोInstance
मूल्य प्राप्त करने की अनुमति दी जाएगी । तो कोई भीInstance
होने को नहीं देख सकताnull
।