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 I want to know about static holder pattern singleton shown below.
public static class Singleton {
    private static class InstanceHolder {
        public static Singleton instance = new Singleton();
    }
    private Singleton(){}
    public static Singleton getInstance() { 
        return InstanceHolder.instance;
    }
}
Please advise under which conditions it is beneficial and what are its benefits.