单例模式之懒加载
/**
* @ClassNameLazyTest
* @Description 单例模式 懒加载案例 主要实现双重校验锁
* @Author prd
* @Date2021/5/26 18:16
* @Version 1.0
**/
public class LazyTest {
// 创建一个私有化的静态LazyTest对象lazy
private static LazyTest lazy;
// 重新构造方法 使其私有化 作用:在其它的地方不能在创建这个类的对象
private LazyTest(){}
// 创建一个公共静态方法来获取LazyTest对象
public static LazyTest getLazy(){
// 第一次判断lazy这个对象是否为空 就是判断是否在方法区中已经存在
if (lazy == null){
// 使用悲观锁经行枷锁 这里锁住的是这个类 避免了多并发的出现
synchronized (LazyTest.class){
/* 再次判断lazy这个对象是否为空 解释:当有两个线程A、B到了synchronized这个悲观锁外面。
如果线程A是第一个进入到这个代码块的创建了LazyTest类对象 这时线程B是第二个进入到这个
代码块的 但是这个类已经有了对象了,所以需要在次判断是否已经有了对象
*/
if (lazy == null){
lazy = new LazyTest();
}
}
}
return lazy;
}
}