Core Java

Get Thread by Name in Java

In Java, each thread has a unique name that helps in identifying and managing it. Sometimes, you may need to retrieve a thread by its name, which can be useful in debugging or monitoring multi-threaded applications. Let us delve into understanding how to get a Java Thread by name and its practical applications.

1. Understanding Thread Names in Java

Every Java thread has a name assigned at creation. If not specified, Java assigns a default name like Thread-0, Thread-1, etc. For example, you can create and name a thread as shown below:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
class MyThread extends Thread {
    public MyThread(String name) {
        super(name);
    }
     
    public void run() {
        System.out.println("Thread running: " + getName());
    }
}
 
public class Main {
    public static void main(String[] args) {
        MyThread t1 = new MyThread("Worker-1");
        t1.start();
    }
}

1.1 Code Explanation and Output

This Java code defines a custom thread class named MyThread that extends the built-in Thread class. The MyThread class has a constructor that takes a String parameter (the name of the thread) and passes it to the superclass constructor using super(name).

The run() method is overridden to print a message indicating that the thread is running, along with its name, which is obtained by calling getName() method from the Thread class.

In the Main class, a new thread object t1 of type MyThread is created with the name "Worker-1". The start() method is called on the t1 object, which causes the thread to start executing. When the thread starts, the run() method is invoked, and it prints the message: "Thread running: Worker-1".

The output of the program is:

1
Thread running: Worker-1

2. Using Thread.getAllStackTraces()

The Thread.getAllStackTraces() method returns a map of all active threads and their stack traces. You can iterate over this map to find a thread by its name.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
public class FindThreadByName {
    public static void main(String[] args) {
        // Creating a sample thread
        Thread worker = new Thread(() -> {
            try {
                Thread.sleep(5000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }, "Worker-Thread");
        worker.start();
 
        // Searching for thread by name
        for (Thread t : Thread.getAllStackTraces().keySet()) {
            if (t.getName().equals("Worker-Thread")) {
                System.out.println("Thread found: " + t.getName());
                break;
            }
        }
    }
}

This approach is useful but may include system threads in the result.

2.1 Code Explanation and Output

This Java code demonstrates how to find a thread by its name. It starts by creating a sample thread worker using the Thread constructor that accepts a Runnable (represented here by a lambda expression). The worker thread sleeps for 5 seconds (using Thread.sleep(5000)) to simulate some processing.

The worker thread is named "Worker-Thread" through the second parameter in the Thread constructor.

After starting the thread using worker.start(), the program proceeds to search for the thread by its name. It does so by iterating over all the threads currently active in the JVM using Thread.getAllStackTraces().keySet(), which returns a set of all the thread objects.

For each thread in the set, it compares the thread’s name using t.getName().equals("Worker-Thread"). If a thread with the name "Worker-Thread" is found, the program prints a message indicating that the thread was found: "Thread found: Worker-Thread", and then exits the loop with a break.

The output of the program is:

1
Thread found: Worker-Thread

This output confirms that the thread named "Worker-Thread" was successfully found during the iteration over all active threads.

3. Using ThreadGroup

ThreadGroup allows managing multiple threads under a group. You can retrieve a list of active threads and search by name.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
public class FindThreadUsingGroup {
    public static void main(String[] args) throws InterruptedException {
        ThreadGroup group = new ThreadGroup("MyThreadGroup");
         
        Thread t1 = new Thread(group, () -> {
            try {
                Thread.sleep(5000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }, "Worker-Thread");
        t1.start();
 
        Thread.sleep(1000); // Ensure the thread has started
 
        Thread[] threads = new Thread[group.activeCount()];
        group.enumerate(threads);
 
        for (Thread t : threads) {
            if (t != null && t.getName().equals("Worker-Thread")) {
                System.out.println("Thread found: " + t.getName());
                break;
            }
        }
    }
}

ThreadGroup is an efficient way to track threads when they are managed within a specific group.

3.1 Code Explanation and Output

This Java code demonstrates how to find a thread by its name within a specific thread group. It begins by creating a ThreadGroup named "MyThreadGroup".

A new thread t1 is created within this group using the Thread constructor that accepts the ThreadGroup as the first argument. The t1 thread executes a task where it sleeps for 5 seconds, simulating some work.

The thread t1 is named "Worker-Thread" through the third parameter in the Thread constructor. After starting the thread with t1.start(), the program ensures that the thread has started by sleeping for 1 second with Thread.sleep(1000).

After the brief pause, the program proceeds to retrieve all active threads in the MyThreadGroup by creating an array of Thread objects of size group.activeCount(), which returns the number of active threads in the group. The method group.enumerate(threads) is then called to fill this array with the threads in the group.

The program then iterates over the array of threads, checking if the thread’s name matches "Worker-Thread". If a matching thread is found, the program prints a message indicating that the thread was found: "Thread found: Worker-Thread", and the loop is terminated using break.

The output of the program is:

1
Thread found: Worker-Thread

This output confirms that the thread named "Worker-Thread" was successfully found within the MyThreadGroup by the program.

4. Conclusion

Java provides multiple ways to retrieve a thread by its name. The most common approaches include:

  • Using Thread.getAllStackTraces() to iterate through all running threads.
  • Using ThreadGroup to get active threads within a specific group.

Choosing the right method depends on your use case. Thread.getAllStackTraces() is useful for a global search, while ThreadGroup is better for organized thread management.

Do you want to know how to develop your skillset to become a Java Rockstar?
Subscribe to our newsletter to start Rocking right now!
To get you started we give you our best selling eBooks for FREE!
1. JPA Mini Book
2. JVM Troubleshooting Guide
3. JUnit Tutorial for Unit Testing
4. Java Annotations Tutorial
5. Java Interview Questions
6. Spring Interview Questions
7. Android UI Design
and many more ....
I agree to the Terms and Privacy Policy

Yatin Batra

An experience full-stack engineer well versed with Core Java, Spring/Springboot, MVC, Security, AOP, Frontend (Angular & React), and cloud technologies (such as AWS, GCP, Jenkins, Docker, K8).
Subscribe
Notify of
guest


This site uses Akismet to reduce spam. Learn how your comment data is processed.

0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
Back to top button