The start method will create a seperate thread of execution. When you invoke the run method, its not a seperate thread. This program has two threads running. They are main and thread b. a.run() will not start a thread. The run method is mounted on main's call stack.