I think I am correct in saying that the run() method does not start a thread but just executes the code in the run() method.
When you write t.run() , a seperate call stack is not created. Whereas when you write t.start() a seperate call stack is created and the thread moves from new state to runnable state. It becomes a thread of execution.
Again the order is which t.start() is called
on seperate threads which thread will run first is not guaranteed.It depends upon the VM which decides as per the priority of the theads.
Please note if you call t.start() on the same thread instance it causes a runtime error.
SCJP 5.0 --> 95%