单例模式几种安全的实现

一、懒汉式,线程安全

public static synchronized Singleton getInstance() {
    if (instance == null) {
        instance = new Singleton();
    }
    return instance;
}

这虽然是线程安全的,但是效率低。

二、饿汉式,线程安全

public class Singleton{
  //类加载时就初始化
  private static final Singleton instance = new Singleton();

  private Singleton(){}

  public static Singleton getInstance(){
    return instance;
  }
}

但是要是明确要求是需要懒加载的,这个就不行的

三、静态内部类

我比较倾向于使用静态内部类的方法,这种方法也是《Effective Java》上所推荐的。

public class Singleton {  
private static class SingletonHolder {
private static final Singleton INSTANCE = new Singleton();
}
private Singleton (){}
public static final Singleton getInstance() {
return SingletonHolder.INSTANCE;
}
}

 

四、枚举

用枚举写单例实在太简单了!这也是它最大的优点。下面这段代码就是声明枚举实例的通常做法。

public enum EasySingleton{
INSTANCE;
}

猜你喜欢

转载自www.cnblogs.com/chenmz1995/p/10487026.html