As Kelvin says directly calling run() will not take you into a new thread's execution context (T2) so it's still T1. Look at the code and see where the direct call to run() is made, think about what the current thread is at that point, and note that THAT will be the current thread when the run() method is executed (just as if you called any other method like foo() or bar(). In fact, when you created the T2 Thread in went into the 'NEW' state because you did get an instance of Thread, but the only way it will go into the 'RUNNABLE' state, and eventually on to RUNNING, is if you call start(). Not saying anything different than Kelvin really but maybe it'll help seeing it explained two different ways.
[ December 07, 2007: Message edited by: nico dotti ]