You are getting a runtime exception because you can start the
thread only once. You are starting the same thread, because the getInst() method returns the same (static) Thread, regardless of what object you call it on.
The reason you are getting a stack overflow error, is because if you remove the static modifier, when the tr member is initialized, that new member will also initialize it's internal tr reference, which in turn will initialize it's initial reference, etc, etc, ad infinitum.