java singleton inner class_关于java:Singleton设计模式实现

我看到了不同种类的singleton类实现。然而,这个特定的实现:https://sourcemaking.com/design_patterns/singleton/java/1不在私有构造函数中创建对象。

有人能解释一下,这两种实现之间的优缺点是什么吗?给出的描述是最小的,我对它了解不多。

谢谢。

单件类和静态类之间的差异可能重复?

看看:javarevisited.blogspot.de/2013/03/…

你提供的链接很好地解释了这一点,如果简单地…但让我试着扩大…

The inner class is referenced no earlier (and therefore loaded no earlier by the class loader) than the moment that getInstance() is called.

这是解释中最重要的部分。

上述文本所指的内部类是SingletonHolder类,它的存在只是为了保存Singleton的一个实例。

因为这个类是私有的,不被引用到任何其他地方,所以保证这个类不会被初始化(由Java类加载器加载),直到EDOCX1的2个方法EDCOX1(1)被调用,因为这是最早的一个JVM来初始化该类。

当初始化一个类时,它包含的任何静态最终字段(和静态块)都将在该类对任何用户代码可用之前初始化。这种初始化是线程安全的,所以使用这种模式的代码不需要任何复杂的同步逻辑,您通常会在爪哇中的单模式模式中实现。

有关替代实现的更多讨论,包括基于enum的解决方案以及更复杂、显式同步的singleton版本,请参阅此问题。

请注意,如果您不关心使单例惰性加载(即仅在需要时初始化),那么只需使用最简单的方法:

class Singleton {

public static final INSTANCE = new Singleton();

private Singleton() { /* cannot be instantiated externally */ }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值