Java
有序性案例代码
/**
* @author 晓果冻
*/
public class SingleInstance {
private static SingleInstance instance;
private SingleInstance(){};
public static SingleInstance getInstance(){
if(instance == null){
synchronized (SingleInstance.class){
if(instance == null){
instance = new SingleInstance();
}
}
}
return instance;
}
}
执行流程
顺序性问题点
instance = new SingleInstance();//这行代码包括如下三个步骤
假设执行顺序:
A
和线程B
同时进入第一个if
条件判断。synchronized
锁,进入代码块,此时instance为null
,所以执行instance=new SingleInstance()
语句。instance = new SingleInstance();
时,线程A在JVM
开辟一块空白的内存空间。A
释放锁。instance
不为null
,但此时instance
并未初始化,是一个空对象。如果线程B
使用instance
对象,可能就会出现问题。