Расширение Thread

Второй способ создания потока — это объявить класс, расширяющий Thread, а затем создать экземпляр этого класса. Расширяющий класс обязан переопределить метод run (), который является точкой входа для нового потока. Он также должен вызвать start () для запуска выполнения нового потока. Ниже приведен пример предыдущей программы, переписанной с использованием расширения Thread.

// Создание второго потока расширением
Thread class NewThread extends Thread {
NewThread () {
// Создать новый второй поток
super("Демонстрационный поток");
System.out.println("Дочерний поток: " + this);
start(); // Запустить поток
}
// Точка входа второго потока.
public void run() {
try {
for (int i = 5; i > 0; i—) {
System.out.println("Дочерний поток: " + i) ;
Thread.sleep(500);
}
} catch (InterruptedException e) {
System.out.println("Дочерний поток прерван.");
}
System.out.println("Дочерний поток завершен.");
}
}
class ExtendThread {
public static void main(String args[]) {
new NewThreadO; // Создать новый поток
try {
for (int i = 5; i > 0; i —) {
System.out.println("Главный поток: " + i) ;
Thread.sleep(1000);
}
}
catch (InterruptedException e) {
System.out.println("Главный поток прерван.");
}
System.out.println("Главный поток завершен.");
}
}

Эта программа генерирует точно такой же вывод, что и предыдущая версия. Как вы можете видеть, дочерний поток создается при конструировании объекта NewThread, который наследуется от Thread.

Обратите внимание на super () внутри NewThread. Он вызывает следующую форму конструктора Thread:

public Thread (String имя_потока)

Здесь имя_потока указывает имя потока.