File APIs for Java Developers
Manipulate DOC, XLS, PPT, PDF and many others from your application.
http://aspose.com/file-tools
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic

java threads

 
Asanka Vithanage
Ranch Hand
Posts: 59
  • 0
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
the following code gives 1 as output
please is there any body can explin the logic and correct thinking pattern to get that answer

class B extends Thread {
B(){}
B(B a){}
public void run(){
System.out.println("1");
}
}


class A extends B {
A(){}
A(B a){}
public void run(){
System.out.println("2");

}

public static void main( String as[]){

Thread a =new B (new A());

a.start();


}
}
 
Rakesh Rajagopalan
Ranch Hand
Posts: 59
  • 0
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Hi,

B extends Thread and A extends B. Hence, A IS-A B and B IS-A Thread. When you say: Thread a = new B(new A());, JVM chooses Object B at runtime and constructs a new B. Since B's constructor can take a 'B' Object and A IS-A B, therefore the run() method of B is called and the output is 1.
 
Jesper de Jong
Java Cowboy
Saloon Keeper
Pie
Posts: 15150
31
Android IntelliJ IDE Java Scala Spring
  • 0
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Welcome to JavaRanch. Please use code tags when you post code.
 
Ankit Garg
Sheriff
Posts: 9496
22
Android Google Web Toolkit Hibernate IntelliJ IDE Java Spring
  • 0
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Asanka this is because the internal implementation of the run method in Thread class. The internal implementation of Thread class looks like this




So when you use this code


The run method of Thread class is called and it calls the run method of MyRunnable class.

But in you code the run method of B will be called and it doesn't calls the run method of A class. Infact, it wastes the Runnable passed to it as a parameter

B(B a)
{//does nothing}

This constructor declaration should have been like this

B(Runnable r)
{
super(r);
}
 
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic