Not only for the above reasons, but this also:
In the life cycle of a thread, especially if you are dealing with multiple threads (like 3 or 4 ), Java handles these threads based on the states they are in. For example, ONLY after start() is called is a thread in the 'ready' state - and ONLY threads in the 'ready' state are in line for processor time. Once there is available processor time, the next 'ready' thread in line with the highest priority is allowed to execute its run() method, which puts that thread in a 'running' state. If this thread is interrupted for a higher priority thread, then it is told to wait(), and it is again put in the 'ready' state, which puts it back in line for processor time. I don't know WHO handles all of this, I just know this is HOW its handled. It would be interesting to know, however, if threads that have their run() method called directly actually run to completion regardless, or if they can be interrupted and put back in a ready state anyway. I'll have to write a tester program for that...maybe I'll post it.