懒汉式单例模式

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

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. 创建单例

你可能感兴趣的:(java学习笔记,单例模式,java,开发语言)