so is it not true that calling run will actually call the run method in Thread class?
Calling run doesn't "call run", it simply executes the run method. Calling start will in turn lead to the run method being called.
The difference is that calling start will actually start a new thread, while calling run will execute the code in the same thread as the main method runs in.