Regarding static holder singleton pattern

后端 未结 2 794
无人及你
无人及你 2020-12-01 08:01

I have developed singleton in many ways depending upon the condition like volatile/lazy singleton, eager singleton, normal singleton and through Enum also, but specifically

相关标签:
2条回答
  • 2020-12-01 08:22

    This pattern is beneficial for at least 3 reasons:

    1. Static factory
    2. Lazy initialization
    3. Thread safe

    The JVM defers initializing the InstanceHolder class until it is actually used, and because the Singleton is initialized with a static initializer, no additional synchronization is needed. The first call to getInstance by any thread causes InstanceHolder to be loaded and initialized, at which time the initialization of the Singleton happens through the static initializer.

    Static holder pattern is also considered as the smartest replace for Double-check-locking antipattern.

    0 讨论(0)
  • 2020-12-01 08:29

    This is a way to make a thread-safe lazy singleton by exploiting the way how JVM loads classes. You can read more about why and how to correctly implement it in Bloch's Effective Java book.

    Remember, that from the testable code point of view singletons (and global state in general) are not beneficial and should be avoided.

    0 讨论(0)
提交回复
热议问题