Tricky questions or puzzles in JAVA part-1

In this post i am going to share some tricky questions in JAVA which is often asked in technical interviews in campus placements.




1. What is the output of below Threads code snippet?

class ThreadA extends Thread{
public ThreadA(Runnable r) {
super(r);
}
public void run(){
System.out.println("Thread A is called");
}
}

class ThreadB implements Runnable{
public void run(){
System.out.println("Thread B is called");
}
}

class Caller{
public static void main(String args[]){
new ThreadA(new ThreadB()).start(); 
}
}

Answer : Thread A is called

Explanation : Here Thread B is not called because when we initialize thread A class and pass the instance of Thread B class to the constructor of A, the run method of Thread A does not call the run method of Thread B class and hence Thread B run () method never gets called and so the "Thread A is called" gets printed.

Correct Code to print "Thread B is called":

class ThreadA extends Thread{
Runnable runnable;
public ThreadA(Runnable r) {
runnable = r;
}
public void run(){
System.out.println("Thread A is called");
runnable.run();
}
}

See my Blog post on Threads in Java:

Theads Basics in Java
Thread Synchronization in JAVA

2. What is the output of below Thread code snippet?

class ThreadA implements Runnable{

public void run(){
System.out.println(Thread.currentThread().getName() );
}
}

class ThreadB implements Runnable{
public void run(){
new ThreadA().run()
new Thread(new ThreadA(), "thread2").run();
new Thread(new ThreadA(). "thread3").start();
}
}

class Caller{
public static void main(String args[]){
new Thread(new ThreadB(), "thread1").start();
}
}

Answer is thread1thread1thread3.

Explanation: We know that when we call run() method on thread instance it does not create a new thread but it just call run() method on the current thread.

So when in the main function new thread is created using an instance of Thread B class and calling start () method, it will create a new thread name "thread1" and call the run() method of class Thread B. When the run() of class Thread B is called it will create the instance of Thread A class and call its run() method in turn resulting in printing the current thread which is "thread1".

Now again in class Thread B run () method a new thread is created using instance of Thread A class and calling the run() method of class Thread A . But as run() method is called and not start() method no new thread will created and again it will print the current thread in class Thread A run () method. So again "thread1" will get printed.

Again,  in Thread class B run() method we again create new thread using Thread A instance and calling the start method this time. Thus creating a new thread "thread3" and printing the same.

So the output will be thread1thread1thread3.

I will post few more blog post about the tricky questions in JAVA. So keep watching!!

Also see my posts on

Tricky Questions or puzzles in C Part-1
Tricky Questions or puzzles in C Part-2
Tricky Questions or puzzles in C Part-3

Good Luck for Interviews.




Comments

Popular posts from this blog

Tricky Questions or Puzzles in C

Program to uncompress a string ie a2b3c4 to aabbbcccc

Number series arrangement puzzles