Prior to Java 5, Java memory model had a lot of issues and above approaches used to fail in certain scenarios where too many threads try to get the instance of the Singleton class simultaneously. So Bill Pugh came up with a different approach to create the Singleton class using an inner static helper class.
The Bill Pugh Singleton implementation
With using the private inner static class the holder is not loaded to memory until someone call the Instance method. Bill Pugh solution is Thread safe and it doesn't require synchronization.