懒汉式单例模式

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值