Holder pattern is used to lazy initialize singleton instances. It is used as a replacement for for the expensive initialization of singleton instances using double checked locking.

public class Something {
    private Something() {}
 
    private static class LazyHolder {
        public static finalSomething INSTANCE = newSomething();
    }
 
    public static Something getInstance() {
        return LazyHolder.INSTANCE;
    }
}

When classloader loads class Something, since there are no static variables, the initialization will complete trivially. When getInstance() is called for the first time, LazyHolder class is loaded and the INSTANCE is initialized in a thread-safe manner. This is best way to create a singleton instance lazily.