Перейти к основному содержимому

Установите имя потока в Java

· 4 мин. чтения

Задача: Сумма двух чисел

Напишите функцию twoSum. Которая получает массив целых чисел nums и целую сумму target, а возвращает индексы двух чисел, сумма которых равна target. Любой набор входных данных имеет ровно одно решение, и вы не можете использовать один и тот же элемент дважды. Ответ можно возвращать в любом порядке...

ANDROMEDA

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 .