Singletons are generally considered to be anti-patterns and shouldn't be used. They do not make code easy to test.
A singleton with an argument makes no sense anyway - what would happen if you wrote:
Singleton s = SingletonHolder.getInstance(1);
Singleton t = SingletonHolder.getInstance(2); //should probably throw IllegalStateException
Your singleton is also not thread-safe as multiple threads can make simultaneous calls to getInstance
resulting in more than one instance being created (possibly with different values of x
).