Calling start() on a Thread instance creates a new thread of execution, which exe- cutes run(). You can call start() on a thread that’s in the NEW state. Calling start() from any other thread state will throw an IllegalThreadStateException:
Calling run() on a Thread instance doesn’t start a new thread of execution. The run() continues to execute in the same thread.