Page 243 - 6253
P. 243
Java (JVM), якщо головний потік завершується до завершення дочірніх потоків, то у
програмі може відбутися збій. Попередня програма гарантує, що головний потік
завершиться останнім, оскільки головний потік «спить» 1000 мілісекунд між
ітераціями циклу, а дочірній потік – тільки 500 мілісекунд. Це змушує дочірній
потік завершитися швидше за головний.
Розширення класу Thread. Ще один спосіб створення потоку – це оголосити
клас, який розширює клас Thread, а потім створити екземпляр даного класу.
Дочірній клас зобов’язаний перевизначити метод run(), який є точкою входу для
нового потоку. Він також повинен викликати метод start() для запуску виконання
нового потоку. У лістингу 10.3 наведено приклад попередньої програми,
переписаної з використанням розширення класу Thread.
Лістинг 10.3 – Створення потоку шляхом розширення класу Thread
class MyThread extends Thread {
// точка входу власного потоку
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("Дочірній потік завершений");
}
}
public class Main {
public static void main(String[] args) {
MyThread thread = new MyThread();
thread.setName("Демонстраційний потік");
System.out.println("Дочірній потік створено:" + thread);
// запуск потоку
thread.start();
try {
for (int i = 5; i > 0; i--) {
242