Appu, the first one is a fairly simple one. You see when you initialize a
thread with a runnable, then something like this happens inside the Thread class
Now when you call start on the Thread instance, the run method of Thread class is called. The run method looks like this
So basically the run method of the concrete Thread class is called who has the responsibility to call the run method of the runnable passed to the Thread constructor. In the example given by you, an instance of A class is created to instantiate the thread. Now when the start method is called, the run method of A class is called. It is the responsibility of run method of A class to call run method of the Runnable object passed to it during initialization. Since it doesn't fulfill that responsibility, so the run method B class is not called. A correct way to implement the run method would have been