单例模式的三种实现方式

Posted blackdd

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单例模式的三种实现方式相关的知识,希望对你有一定的参考价值。

懒汉、饿汉、双重校验锁

1、懒汉:需要时才会去创建

public Class Singleton{

  private static Singleton instance = null;

  private  Singleton(){}

  public static synchronized Singleton getInstance(){

    if( instance == null ){instance = new Singleton(); }

    return instance;

  }

}

2、饿汉:线程安全,类加载时就创建了实例

public Class Singleton{

  private static Singleton instance = new Singleton();

  private  Singleton(){}

  public static Singleton getInstance(){

    return instance;

  }

}

//饿汉方式可做变种,将实例放入静态代码块中:

static{

  instance  = new Singleton();

}

3、双重校验锁: volatile 修饰实例变量,同时synchronized同步方法

  在懒汉实现中,如果两个线程同时执行了if判断为null的情况,则会依次执行同步代码块里的代码,为避免创建两个实例,在同步代码块里添加if进行二重校验。

public Class Singleton{

  private static volatile Singleton instance = null;    //volatile是jdk1.5后才有的

  private  Singleton(){}

  public static  Singleton getInstance(){

    if( instance == null ){

      Synchronized(Singleton.class){

        if(instance == null){

          instance = new Singleton();

        }  

      }

     }

    return instance;

  }

}

另:还有静态内部类的实现方式,相当于把饿汉的创建实例方式提到内部类,在外部类getInstance方法内return它的内部类变量(此种方式是线程安全的)

以上是关于单例模式的三种实现方式的主要内容,如果未能解决你的问题,请参考以下文章

python实现单例模式的三种方式及相关知识解释

单例模式的三种实现方式

设计模式:单例模式的三种创建方式及其各自的优缺点

finalstatic单例模式与线程安全之间的关系(附单例模式的三种线程安全方式的实现)

设计模式之单例模式(三种实现方式)

单例模式的三种实现 以及各自的优缺点