Page 138 - 4868
P. 138
Ошибка! Стиль не определен. 136
завершення іншого потоку? Для цього в класі Thread визначені відповідні
методи, що дають відповідь на це питання.
Існує два способи визначити, що потік був завершений. По-перше, для
будь-якого потоку можна викликати метод isAlive(), визначений у класі
Thread. Метод isAlive() повертає значення true, якщо потік, для якого
він був викликаний, ще виконується. В іншому випадку він поверне значення
false.
По-друге, в класі Thread визначено метод join(), який очікує
завершення потоку, для якого він був викликаний. Перевантажені форми
методу join() дозволяють вказувати максимальний проміжок часу, який
інший потік буде чекати завершення зазначеного потоку.
Нижче наведена вдосконалена версія попереднього прикладу (лістинг
2.6) в якій використовується метод join(), який гарантує, що головний
потік завершиться останнім. У даному прикладі демонструється також
використання методу isAlive().
Лістинг 2.6 – Приклад використання методу join() для очікування
завершення потоків
class MyThread implements Runnable {
String name;
Thread 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("Третій");
System.out.println(ob1.thread.getName() +
"потік запущений:" + ob1.thread.isAlive());