Dengan kata lain, apakah thread implementasi Singleton ini aman:
public class Singleton
{
private static Singleton instance;
private Singleton() { }
static Singleton()
{
instance = new Singleton();
}
public static Singleton Instance
{
get { return instance; }
}
}
Xakhirnya menjadi -1 bahkan tanpa threading . Ini bukan masalah keamanan thread. Alih-alih, penginisialisasi x = -1berjalan pertama (pada baris sebelumnya dalam kode, nomor baris lebih rendah). Kemudian inisialisasi X = GetX()dijalankan, yang membuat huruf besar Xsama dengan -1. Dan kemudian konstruktor statis "eksplisit", tipe initializer static C() { ... }berjalan, yang hanya mengubah huruf kecil x. Jadi setelah semua itu, Mainmetode (atau Othermetode) dapat melanjutkan dan membaca huruf besar X. Nilainya akan -1, bahkan hanya dengan satu utas.
Instancesekaligus. Salah satu utas akan diperintahkan untuk pertama kali menjalankan penginisialisasi tipe (juga dikenal sebagai konstruktor statis). Sementara itu semua utas lainnya yang ingin membacaInstanceproperti, akan dikunci hingga jenis inisialisasi selesai. Hanya setelah inisialisasi bidang selesai, utas akan diizinkan untuk mendapatkanInstancenilai. Jadi tidak ada yang bisa melihatInstancekeberadaannull.