Why do we call the thread object\'s start() method which in turns calls run() method, why not we directly call run() method?
The difference is that if we execute the run method by start() method, it creates a new thread where we can execute run method otherwise the run() method will be executed in the thread created by JVM in the public static void main() method. This is exactly the whole point of multithreading, to run a different action on new threads.