当前位置:网站首页>懒汉式单例模式

懒汉式单例模式

2022-06-11 00:27:00 haohulala

今天面试被问了懒汉式单例模式,没有答上来,现将答案记录下来

public class Solutionaaa {
 
    private volatile static Solutionaaa solutionaaa = null;  // 1

    private Solutionaaa(){

    }

    public static Solutionaaa getSolutionaaa(){
        if(solutionaaa == null){              // 2
            synchronized (Solutionaaa.class){ // 3
                if(solutionaaa == null){      // 4
                    solutionaaa = new Solutionaaa(); // 5
                }
            }
        }
        return solutionaaa;
    }

}

以上便是懒汉式单例模式的写法,现在对于代码做一个解析

1. 使用volatile是为了防止指令重排

2. 是为了加快多线程模式下的运行速率,比如已经创建了一个实例,那么就不需要去竞争锁了

3+4. 是为了防止多线程模式下重复创建单例。有可能线程A竞争到了锁,然后创建了实例,退出了锁,此时线程B也进到临界区,此时如果没有if判断是否为null,那么就会重复创建实例

5. 创建单例

原网站

版权声明
本文为[haohulala]所创,转载请带上原文链接,感谢
https://blog.csdn.net/haohulala/article/details/125208433