I will try my best to answer.
The above statement is not starting the new thread.It just calls the overridden start() method in MyThread class.
Thats why you got the output : MyThread: start()
This statement starts the newly created thread.This will access start() method declared in Thread
class which in turn calls run() method declared in MyRunnable class which results in the output MyRunnable: run()
mythread.start() calls the start() of MyThread alone
thread.start() calls the start() of Thread class which calls run() of MyRunnable.