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());
   133   134   135   136   137   138   139   140   141   142   143