Joseph,
Think of these methods as
signalling operations which shout for the attention of thread scheduler. A thread object is just like any other object, but it communicates with the thread scheduler( a
native program which is vendor dependent )
When you call <code>suspend() ( or resume() or wait() or notify() or notifyAll() or stop() or interrupt() </code> etc ) internally a flag is set indicating the state change. The "big-brother" (aka
thread scheduler ) who is watching all the members of his family( all
reachable thread objects ) makes note of this state change and initiates an appropriate action - like removing the thread from the running pool and adding it to the waiting pool, or the other way around as the situation may be.
It is really important to remember merely calling these methods will not
guarantee an immediately observable behaviour. Since
everything depends on the thread scheduler
you should look at all of these transitional methods as
state-setters. And when you do, a suspended thread calling <code>resume()</code> on itself isn't really such a big deal. It is just another plain-vanilla method call!!
HTH
Ajith