Skip to main content

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 ( Updated for 2026)

Updated for 2026 This article was originally written when C/C++ puzzles were commonly asked in interviews. While such language-specific puzzles are less frequent today, the problem-solving and logical reasoning skills tested here remain highly relevant for modern Software Engineering, Data Engineering, SQL, and system design interviews . Why These Puzzles Still Matter in 2026 Although most Software &   Data Engineering interviews today focus on Programming, SQL, data pipelines, cloud platforms, and system design , interviewers still care deeply about how you think . These puzzles test: Logical reasoning Edge-case handling Understanding of execution flow Ability to reason under pressure The language may change , but the thinking patterns do not . How These Skills Apply to Data Engineering Interviews The same skills tested by C/C++ puzzles appear in modern interviews as: SQL edge cases and NULL handling Data pipeline failure scenarios Incremental vs ...

Decorators in Python

Decorators provide additional functionality to the functions without directly changing their definition of them. Basically, it takes the functions as an argument, adds functionality to them, and returns it.  Before diving deep into the concept of Decorators, let's first try to understand  What are functions in Python and what is an inner function? In Python everything is Objects, be it Class, Variables, and Functions . So functions are python first-class objects that can be used or passed as an argument. You can store the functions in variables, you can pass a function to another function as parameters, and you can also return the function from the function. Below is one simple example where we are treating functions as objects . def make_me_lowercase ( str ): return str .lower() print (make_me_lowercase( "HELLO World" )) copy_of_you = make_me_lowercase print (copy_of_you( "HELLO World" )) The output of the above calls for both the functio...

Program to uncompress a string ie a2b3c4 to aabbbcccc

Below is the program to uncompress a string #include<stdio.h> #include<conio.h> #include<stdlib.h> int main() { char str[100]="a2b3c4d8u7"; for(int i=0;str[i]!='\0';i++) { if(i%2!=0) { for(int j=0;j<atoi(&str[i]);j++) { printf("%c",str[i-1]); } } } getch(); } Want to become a Data Engineer? Check out below blog posts  1.  5 Key Skills Every Data Engineer needs in 2023 2.  How to prepare for Data Engineering Interviews 3.  Top 25 Data Engineer Questions