Invoking start() will create a new thread and execute run() in this new thread. Whereas, invoking run() yourself will execute it in the current thread itself. Execution of run() will not switch to a different thread. So it will execute its actions on the main thread itself.