অন্য কথায়, এই একা বাস্তবায়ন থ্রেড নিরাপদ:
public class Singleton
{
private static Singleton instance;
private Singleton() { }
static Singleton()
{
instance = new Singleton();
}
public static Singleton Instance
{
get { return instance; }
}
}
X
শেষ হয় । এটি কোনও থ্রেড-সুরক্ষা সমস্যা নয়। পরিবর্তে, ইনিশিয়ালাইজারটি প্রথম চালায় (এটি কোডের আগের লাইনে রয়েছে, একটি নিম্ন রেখার সংখ্যা)। তারপরে ইনিশিয়ালাইজারটি চালিত হয়, যা উচ্চ-কেসটিকে সমান করে তোলে । এবং তারপরে "সুস্পষ্ট" স্ট্যাটিক কনস্ট্রাক্টর, টাইপ ইনিশিয়ালাইজার চালিত হয়, যা কেবল নিম্ন-কেস পরিবর্তন করে । সুতরাং এত কিছুর পরেও, পদ্ধতি (বা পদ্ধতি) এগিয়ে যেতে এবং আপার-কেস পড়তে পারে । এটির মান হ'ল এমনকি একটি মাত্র থ্রেড সহ। -1
x = -1
X = GetX()
X
-1
static C() { ... }
x
Main
Other
X
-1
Instance
একবারে সম্পত্তি পেতে চায় । কোনও থ্রেডকে প্রথমে টাইপ ইনিশিয়ালাইজার চালাতে বলা হবে (এটি স্ট্যাটিক কনস্ট্রাক্টর নামেও পরিচিত)। ইতিমধ্যেInstance
সম্পত্তিটি পড়তে ইচ্ছুক অন্যান্য সমস্ত থ্রেড , টাইপ ইনিশিয়ালাইজারটি শেষ না হওয়া পর্যন্ত লক হয়ে যাবে। ফিল্ড ইনিশিয়ালাইজার শেষ হওয়ার পরে, থ্রেডগুলিকেInstance
মান পেতে দেওয়া হবে । সুতরাং কেউInstance
সত্তা দেখতে পারে নাnull
।