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
   169   170   171   172   173   174   175   176   177   178   179