实现单例模式的 五种 方式

元气小坏坏 提交于 2019-12-06 04:58:17

1、饿汉式 在类加载的时候完成 类的初始化。

    1.1 静态代码块 获取 对象

    1.2 直接 new 一个对象

结论 可以用 可能会造成 内存的 浪费 (这个类 可能会被别的方式 初始化 比如 子类 被初始化 通过反射,或者调用 这个类的静态方法)



2、懒汉式

    在使用 获取对象的方法时返回一个对象。线程不安全。 开发时不用

    在使用 获取对象的方法时可以加个同步的 synchronized 解决线程安全 问题 效率太低 不使用。


3、双重锁模式

    判断 对象是不是空 是空的化 进入一个同步方法 方法里面 由判断了下 对象 是空就 new 对象 是推荐使用的。解决线程安全问题 和 实现懒加载。

4、静态内部类的方式

    推荐使用 外部类加载的时候内部类不一定加载 只有在使用到内部类的时候才加载 jvm加载类 是线程安全的。解决线程安全问题,和实现懒加载。


5、枚举类的方式获取对象

    推荐使用 解决线程安全问题 代码如下


public enum Singleton {
  INSTANCE;
  public void sayHello(){
    System.out.println("ok");
  }
}



public class Test {
  public static void main(String[] args) {
    System.out.println("枚举的方式创建单例");
    Singleton singleton = Singleton.INSTANCE;
    Singleton singleton1 = Singleton.INSTANCE;
    System.out.println(singleton == singleton1); //true
  }
}

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!