Nói cách khác, chủ đề triển khai Singleton này có an toàn không:
public class Singleton
{
private static Singleton instance;
private Singleton() { }
static Singleton()
{
instance = new Singleton();
}
public static Singleton Instance
{
get { return instance; }
}
}
Xcuối cùng -1 thậm chí không có luồng . Nó không phải là một vấn đề an toàn chủ đề. Thay vào đó, trình khởi tạo x = -1chạy trước (nó nằm trên một dòng trước đó trong mã, số dòng thấp hơn). Sau đó, trình khởi X = GetX()chạy chạy, làm cho chữ hoa Xbằng -1. Và sau đó, hàm tạo tĩnh "tường minh", trình khởi tạo kiểu static C() { ... }chạy, chỉ thay đổi chữ thường x. Vì vậy, sau tất cả điều đó, Mainphương thức (hoặc Otherphương thức) có thể tiếp tục và đọc chữ hoa X. Giá trị của nó sẽ là -1, thậm chí chỉ với một luồng.
Instancecùng một lúc. Một trong các luồng sẽ được yêu cầu trước tiên chạy trình khởi tạo kiểu (còn được gọi là hàm tạo tĩnh). Trong khi đó, tất cả các luồng khác muốn đọc thuộcInstancetính, sẽ bị khóa cho đến khi trình khởi tạo kiểu kết thúc. Chỉ sau khi trình khởi tạo trường kết thúc, các luồng sẽ được phép nhậnInstancegiá trị. Vì vậy, không ai có thể nhìn thấyInstanceđượcnull.