Page 174 - 6571
P. 174
іншого потоку? Для цього в класі Thread визначені відповідні
методи, що дають відповідь на це питання.
Існує два способи визначити, що потік був завершений. По-
перше, для будь-якого потоку можна викликати метод
isAlive(), визначений у класі Thread. Метод isAlive()
повертає значення true, якщо потік, для якого він був
викликаний, ще виконується. В іншому випадку він поверне
значення false.
По-друге, в класі Thread визначено метод join(), який
очікує завершення потоку, для якого він був викликаний.
Перевантажені форми методу join() дозволяють вказувати
максимальний проміжок часу, який інший потік буде чекати
завершення зазначеного потоку.
Нижче наведена вдосконалена версія попереднього прикладу
(лістинг 36), в якій використовується метод join(), який
гарантує, що головний потік завершиться останнім. У даному
прикладі демонструється також використання методу
isAlive().
Лістинг 36 – Приклад використання методу join() для
очікування завершення потоків
class MyThread implements Runnable {
String name;
Thread;
MyThread(String name) {
this.name = name;
thread = new Thread(this, name);
System.out.println("Новий потік:" + thread);
thread.start();
}
public void run() {
try {
for (int i = 5; i > 0; i--) {
System.out.println(name + ":" + i);
Thread.sleep(1000);
}
} catch (InterruptedException e) {
System.out.println(name + "перерваний");
}
System.out.println(name + "завершений");
173