In test1, there is only one instance of MyClass to create new threads but in test2 method, a new instance of MyClass is created to create new threads.
Hold on..You are mixing up concepts here - singletons with runnable objects
The idea behind creating a thread object with a runnable object passed to its class constructor (the
pattern you follow in both test1 and test2) is to execute the task logic encapsulated in the run() method of the runnable object in a different thread.So there's certainly nothing much you gain out of reusing the same runnable object across multiple threads except perhaps under extremely tricky situations that mandate such usage.So you would probably ,in most cases,want different runnable objects to be handed off to different threads.
Talking about singletons,they are used in situations where it's expensive to create multiple objects of the same class ,where it doesn't make sense to have multiple objects. A typical example could be a DBDonnectionFactory or a DBConnectionPoolManager.
Do some research on the diversity of applications of the singleton pattern.There's a wealth of information available. Also you may want to revisit the tutorials on concurrent programming in
java.