单例模式java

avatar
作者
猴君
阅读量:2

并发的有序性会导致返回空指针

class A{ 	private static volatil A a; 	private A(){} 	public A getInstance(){ 		if(a==null){ 			synchronized(A.class){ 				if(a==null) 					a=new A(); 			} 		} 	return a; } 

a=new A();这条语句,他需要:开辟空间,初始化空间,指针指向空间,。
可能一个线程new,另一个线程此时因为重排序,指针不为null但是空间没有初始化。
所以给a加volatile,保证不会重排序。

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!