单例模式

193 阅读1分钟
  • 枚举单例,要先理解enum,代码中INSTANCE本身就是一个EnumSingleton类型的引用, 与普通的饿汉式单例相似。

  • 双层校验, 第一次校验不是线程安全的,也就是说可能有多个线程同时得到singleton为null的结果,接下来的同步代码块保证了同一时间只有一个线程进入,而第一个进入的线程会创建对象,等其他线程再进入时对象已创建就不会继续创建。这是一个很巧妙的方式,如果对整个方法同步,所有获取单例的线程都要排队,但实际上只需要对创建过程同步来保证"单例",多个线程不管是否已经有单例可以同时去请求。

参考文章:

单例模式以及七种实现方式

java volatile关键字解惑

浅谈使用单元素的枚举类型实现单例模式

Java枚举enum以及应用:枚举实现单例模式

java单例之enum实现方式