Hi Kathy
Well this is really a nice question. This question not only relates with threads but also with method overriding.
new A(new B()).start(); this should cause thread A to be started and run the run() method. But which one A's or B's. Well it should be B's run method that should be called as the you have passed an object of B in the constructor of thread A.But this doesn't happens. Because when new A(new B()).start(); is called it invokes Thread's class start() method or you can say A's start method as A also has inherited it. This start methods points towards the run method of the Orignal Thread class. Which might be something like
Now this method is overidden by A(as A has redefined it) so now instead of executing the Thread's class run method which would have caused B's run() to be called A's run() method is called. You can check this by commenting out the A's run() method which will now cause the B's run method to run.
To put it simply the orignal Thread class method will call the Runnable's run() method but in case you override it the overriden method will be executed.
In case if its still not clear, ask again.
Well I also had the same problem and Maulin helped me out. You can check out this thread which covers this topic.
Thread [ May 22, 2003: Message edited by: Anupam Sinha ]