If you directly call the run() method (not the start() method of the Thread object), it will be called just like any other normal method. In fact, the run() method is just a normal method just like anything else.
If you call the start() method to start a new thread, the run() method will be called by the system in a new thread.
Each thread has its own call stack, so in the second case, the run() method will be called in a new call stack.
(Don't confuse the terms "call stack" and "stack frame" - a stack frame is one set of parameters and return information on a call stack).
Sagar Rohankar wrote:So it means, each Runnable#run() method gets its own call stack ?
Each thread has its own call stack. So if you create a new thread, a new call stack will also be created, and the stack frame for the run() method will be one of the first frames on that new call stack.