单例模式双重校验解析

自我检测:

1.代码

2.volatile的作用

3.两个 instance==null 分别的作用

4.synchronized同步代码块内,获取类的三个方法

 

 

 

 

 

 

 

 

 

 

 

 

 

1.代码

  public class Singleton{

    private static volatile Singleton instance;

    private Singleton(){};

    public static Singleton getInstance(){

      if(instance==null){

        synchronized(Singleton.class){

          if(instance==null){

            instance = new Singleton();

          }  

        }

      }

      return instance;

    }

  }

2.volatile的作用

  防止Singleton指令重排序。

3.两个 instance==null 分别的作用

  第一个:防止多个线程创建多个实例

  第二个:防止多个线程同时进入第一个判断,创建第一个实例的线程释放锁后,其他线程获得锁再创建多余实例。

4.synchronized同步代码块内,获取类的方法

  1)Singleton.class  2)instance.getClass  3)Class.forName("类路径的字符串,用'.'间隔")

posted @ 2020-03-04 11:11  刘靖宇  阅读(484)  评论(0编辑  收藏  举报