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

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,保证不会重排序。

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部