Initialization-on-demand holder idiom

In software engineering, the initialization-on-demand holder (design pattern) idiom is a lazy-loaded singleton. In all versions of Java, the idiom enables a safe, highly concurrent lazy initialization of static fields with good performance.

The implementation of the idiom relies on the initialization phase of execution within the Java Virtual Machine (JVM) as specified by the Java Language Specification (JLS). When the class  is loaded by the JVM, the class goes through initialization. Since the class does not have any static variables to initialize, the initialization completes trivially. The static class definition  within it is not initialized until the JVM determines that   must be executed. The static class  is only executed when the static method   is invoked on the class , and the first time this happens the JVM will load and initialize the   class. The initialization of the  class results in static variable   being initialized by executing the (private) constructor for the outer class. Since the class initialization phase is guaranteed by the JLS to be sequential, i.e., non-concurrent, no further synchronization is required in the static  method during loading and initialization. And since the initialization phase writes the static variable  in a sequential operation, all subsequent concurrent invocations of the   will return the same correctly initialized   without incurring any additional synchronization overhead.

Caveats
While the implementation is an efficient thread-safe "singleton" cache without synchronization overhead, and better performing than uncontended synchronization, the idiom can only be used when the construction of  is guaranteed to not fail. In most JVM implementations, if construction of  fails, subsequent attempts to initialize it from the same class-loader will result in a   failure.