Page 168 - 6571
P. 168
System.out.println("Головний потік перерваний");
System.out.println("Головний потік завершений");
}
}
}
Як уже згадувалося раніше, в багатопотоковій програмі
головний потік часто повинен завершувати виконання останнім.
У деяких старих віртуальних машинах Java (JVM), якщо
головний потік завершується до завершення дочірніх потоків, то
у програмі може відбутися збій. Попередня програма гарантує,
що головний потік завершиться останнім, оскільки головний
потік «спить» 1000 мілісекунд між ітераціями циклу, а дочірній
потік – тільки 500 мілісекунд. Це змушує дочірній потік
завершитися швидше за головний.
Розширення класу Thread. Ще один спосіб створення потоку
– це оголосити клас, який розширює клас Thread, а потім
створити екземпляр даного класу. Дочірній клас зобов’язаний
перевизначити метод run(), який є точкою входу для нового
потоку. Він також повинен викликати метод start() для
запуску виконання нового потоку. У лістингу 35 наведено
приклад попередньої програми, переписаної з використанням
розширення класу Thread.
Лістинг 35 – Створення потоку шляхом розширення
класу 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("Дочірній потік завершений");
}
}
167