懒汉式单例模式为何线程不安全

这里是一个懒汉式的示例代码:

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对象。

猜你喜欢

转载自blog.csdn.net/mars_idea/article/details/80724404