Course – LS – All

Get started with Spring and Spring Boot, through the Learn Spring course:

>> CHECK OUT THE COURSE

1. Overview

In this tutorial, we’ll look at different ways to set the name of a Thread in Java. First, we’ll create an example of running two Threads. One prints only even numbers, and the other only odd numbers. Then, we’ll give our Threads a custom name and display them.

2. Ways to Set Thread Name

A Thread is a lightweight process that can execute concurrently. The Thread class in Java provides a default name for threads.

In some cases, we may need to know which thread is running, so giving a custom name to a Thread can make it easier to spot among other running threads.

Let’s start by defining a simple class that creates two Threads. The first Thread will print even numbers between 1 and N. The second Thread will print odd numbers between 1 and N. In our example, N is 5.

We’ll also print the Thread default names.

First, let’s create two Threads:

public class CustomThreadNameTest {

    public int currentNumber = 1;

    public int N = 5;

    public static void main(String[] args) {

        CustomThreadNameTest test = new CustomThreadNameTest();

        Thread oddThread = new Thread(() -> {
            test.printOddNumber();
        });

        Thread evenThread = new Thread(() -> {
            test.printEvenNumber();
        });

        evenThread.start();
        oddThread.start();

    }
    // printEvenNumber() and printOddNumber()
}

Here, in both the printEvenNumber and printOddNumber methods, we’ll check if the current number is even or odd and print the number along with the Thread name:

public void printEvenNumber() {
    synchronized (this) {
        while (currentNumber < N) {
            while (currentNumber % 2 == 1) {
                try {
                    wait();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            System.out.println(Thread.currentThread().getName() + " --> " + currentNumber);
            currentNumber++;
            notify();
        }
    }
}

public void printOddNumber() {
    synchronized (this) {
        while (currentNumber < N) {
            while (currentNumber % 2 == 0) {
                try {
                    wait();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            System.out.println(Thread.currentThread().getName() + " --> " + currentNumber);
            currentNumber++;
            notify();
        }
    }
}

Running the code gives us the following output:

Thread-0 --> 1
Thread-1 --> 2
Thread-0 --> 3
Thread-1 --> 4
Thread-0 --> 5

All threads have a default name, Thread-0, Thread-1, and so on.

2.1. Using the Thread Constructor

The Thread class provides some constructors where we can provide the Thread name during the Thread creation, such as:

  • Thread(Runnable target, String name)
  • Thread(String name)

The parameter name, in this case, is the Thread name.

Using the Thread constructor, we can provide the thread name at the thread creation time.

Let’s give a custom name for our Threads:

Thread oddThread = new Thread(() -> {
    test.printOddNumber();
}, "ODD");

Thread evenThread = new Thread(() -> {
    test.printEvenNumber();
}, "EVEN");

Now, when we run our code, the custom names are displayed:

ODD --> 1
EVEN --> 2
ODD --> 3
EVEN --> 4
ODD --> 5

2.2. Using the setName() Method

Additionally, the Thread class provides a setName method.

Let’s call setName via Thread.currentThread().setName() :

Thread oddThread = new Thread(() -> {
    Thread.currentThread().setName("ODD");
    test.printOddNumber();
});

Thread evenThread = new Thread(() -> {
    Thread.currentThread().setName("EVEN");
    test.printEvenNumber();
});

Also, via Thread.setName() :

Thread oddThread = new Thread(() -> {
    test.printOddNumber();
});
oddThread.setName("ODD");

Thread evenThread = new Thread(() -> {
    test.printEvenNumber();
});
evenThread.setName("EVEN");

Again, running the code shows the custom name of our Threads:

ODD --> 1
EVEN --> 2
ODD --> 3
EVEN --> 4
ODD --> 5

3. Conclusion

In this article, we looked at how we can set the name of a Thread in Java. First, we created a Thread with the default name, then set a custom name using the Thread constructor and later with the setName method.

As always, the example code for this article is available over on GitHub.

Course – LS – All

Get started with Spring and Spring Boot, through the Learn Spring course:

>> CHECK OUT THE COURSE
res – REST with Spring (eBook) (everywhere)
Comments are open for 30 days after publishing a post. For any issues past this date, use the Contact form on the site.