public class Singleton {
//volatile防止指令重排序(理想状态是 内存分配 初始化 返回对象引用)
//保证不会出现内存分配、返回对象引用、初始化这样的顺序(因为前两步骤就能使得对象!=null,其他线程拿到错误的对象)
private volatile static Singleton singleton;
public static Singleton getInstance(){
if(singleton==null){
//1位置
synchronized (Singleton.class){//因为只需要创建对象防同步,所以不需要锁方法
if(singleton==null){//双重检测,防止其他线程进入1位置,锁打开,又会重新new对象
singleton=new Singleton();
}
}
}
return singleton;
}
}
单例模式(多线程下最佳方案)
最新推荐文章于 2024-07-07 23:15:22 发布