1. 程式人生 > >懶漢式單例模式為何執行緒不安全

懶漢式單例模式為何執行緒不安全

這裡是一個懶漢式的示例程式碼:

public class Singleton {
	private static Singleton s;
	
	private Singleton() {
		
	}
	
	public static Singleton getInstance() {
		if (s == null) {
			//執行緒在這裡等待
			s = new Singleton();
		}
		return s;
	}
	
}

我們假設有多個執行緒1,執行緒2都需要使用這個單例物件。而恰巧,執行緒1在判斷完s==null後突然交換了cpu的使用權,變為執行緒2執行,由於s仍然為null,那麼執行緒2中就會建立這個Singleton的單例物件。之後執行緒1拿回cpu的使用權,而正好執行緒1之前暫停的位置就是判斷s是否為null之後,建立物件之前。這樣執行緒1又會建立一個新的Singleton物件。