why we call start() and not run() in our program when result is same.
The result is
not the same. In this trivial example the same output may be produced, but as I said before, what happens internally in the JVM is very different.
Often threads are used to start some computation that takes a while, and which should not hold up the main thread if execution. Imagine your code was part of a GUI, and the run method took 5 minutes to finish - if you had called "run", the GUI would become unresponsive for 5 minutes - very undesirable. Only by calling "start" is the run method executed in its own thread, and thus the remainder of the code can continue to run.
I suggest you work through the
concurrency chapter of the
Java tutorial, particularly the Thread Objects section. It will make things clearer.