Page 248 - 6253
P. 248
isAlive() повертає значення true, якщо потік, для якого він був викликаний, ще
виконується. В іншому випадку він поверне значення false.
По-друге, в класі Thread визначено метод join(), який очікує завершення потоку,
для якого він був викликаний. Перевантажені форми методу join() дозволяють
вказувати максимальний проміжок часу, який інший потік буде чекати завершення
зазначеного потоку.
Нижче наведена вдосконалена версія попереднього прикладу (лістинг 10.4) в
якій використовується метод join(), який гарантує, що головний потік завершиться
останнім. У даному прикладі демонструється також використання методу isAlive().
Лістинг 10.4 – Приклад використання методу 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 + "завершений");
}
}
class Main {
public static void main(String args[]) {
MyThread ob1 = new MyThread("Перший");
MyThread ob2 = new MyThread("Другий");
MyThread ob3 = new MyThread("Третій");
247