1. Обзор
В этом руководстве мы рассмотрим различные способы установки имени потока
в Java. Сначала мы создадим пример запуска двух потоков.
Один печатает только четные числа, а другой только нечетные числа. Затем мы дадим нашим потокам
собственное имя и отобразим их.
2. Способы установить имя темы
Поток — это легкий
процесс, который может выполняться одновременно. Класс Thread
в Java предоставляет имя по умолчанию для потоков.
В некоторых случаях нам может понадобиться знать, какой поток выполняется, поэтому присвоение потоку пользовательского имени может упростить его обнаружение среди других запущенных потоков .
Начнем с определения простого класса, который создает два потока.
Первый поток
будет печатать четные числа от 1 до N. Второй поток
будет печатать нечетные числа от 1 до N. В нашем примере N равно 5.
Мы также напечатаем имена потоков
по умолчанию.
Во-первых, давайте создадим два потока:
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()
}
Здесь в обоих методах printEvenNumber
и printOddNumber
мы проверяем, является ли текущее число четным или нечетным, и печатаем число вместе с именем потока
:
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();
}
}
}
Запуск кода дает нам следующий результат:
Thread-0 --> 1
Thread-1 --> 2
Thread-0 --> 3
Thread-1 --> 4
Thread-0 --> 5
Все потоки имеют имя по умолчанию, Thread-0, Thread-1
и так далее.
2.1. Использование конструктора потоков
Класс Thread
предоставляет некоторые конструкторы, в которых мы можем указать
имя потока во время создания потока
, например:
Thread (Runnable target, String name)
Тема (имя строки)
Имя
параметра в данном случае — это имя потока
.
Используя конструктор Thread
, мы можем предоставить имя потока во время создания потока.
Давайте дадим произвольное имя для наших Thread
s:
Thread oddThread = new Thread(() -> {
test.printOddNumber();
}, "ODD");
Thread evenThread = new Thread(() -> {
test.printEvenNumber();
}, "EVEN");
Теперь, когда мы запускаем наш код, отображаются пользовательские имена:
ODD --> 1
EVEN --> 2
ODD --> 3
EVEN --> 4
ODD --> 5
2.2. Использование метода setName()
Кроме того, класс Thread
предоставляет метод setName
.
Давайте вызовем setName
через Thread.currentThread().setName()
:
Thread oddThread = new Thread(() -> {
Thread.currentThread().setName("ODD");
test.printOddNumber();
});
Thread evenThread = new Thread(() -> {
Thread.currentThread().setName("EVEN");
test.printEvenNumber();
});
Кроме того, через Thread.setName()
:
Thread oddThread = new Thread(() -> {
test.printOddNumber();
});
oddThread.setName("ODD");
Thread evenThread = new Thread(() -> {
test.printEvenNumber();
});
evenThread.setName("EVEN");
Опять же, запуск кода показывает пользовательское имя наших Thread
s:
ODD --> 1
EVEN --> 2
ODD --> 3
EVEN --> 4
ODD --> 5
3. Заключение
В этой статье мы рассмотрели, как мы можем установить имя потока
в Java. Сначала мы создали поток
с именем по умолчанию, затем установили пользовательское имя с помощью конструктора потока
, а затем с помощью метода setName
. ``
Как всегда, пример кода для этой статьи доступен на GitHub .