SingletonHolder
只有在Singleton.getInstance()
运行时才会初始化。这依赖于SingletonHolder
仅在Singleton.getInstance()
内部引用。它是线程安全的,因为类加载器负责同步。使用没有持有符的单例是急切的初始化,因为一旦JAVA遇到引用
Singleton
的代码,它的所有静电字段都会被解析。它也是线程安全的,因为类加载器负责同步。,带限定符的单例。,没有持有符的单例。,更新以回应@Jan认为这是What is an efficient way to implement a singleton pattern in Java?副本的建议。我不同意。我不是在问什么是最好的方法:我只是在问是什么让这两个特定的实现变得懒惰而不是急于加载。像xyz’s这样的答案大体上是针对懒惰和渴望的,但不是通过对比我试图检查的两个示例(或者使用相同的关键字,这就是为什么我在最初的搜索中没有出现它)。,作为对@sriram的响应,下面是我用来证明哪个是急切加载,哪个是延迟加载的测试。,输出显示main
方法在调用getInstance()
之前启动,因此延迟加载。,输出显示main
方法在调用getInstance()
方法后启动,因此会立即加载。,这篇关于带或不带持有者的单例=懒惰与急切初始化?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,