Page 169 - 6571
P. 169

public class Main {

                    public static void main(String[] args) {
                      MyThread thread = new MyThread();
                      thread.setName("Демонстраційний потік");
                      System.out.println("Дочірній  потік  створено:"  +
            thread);
                      // запуск потоку

                      thread.start();
                      try {
                        for (int i = 5; i > 0; i--) {
                          System.out.println("Головний потік: " + i);

                          Thread.sleep(1000);
                        }
                      } catch (InterruptedException e) {
                        System.out.println("Головний  потік  перерва-
            ний");

                        System.out.println("Головний  потік  заверше-
            ний");
                      }
                    }
                  }

                  Дана  програма  генерує  точно  такий  же  результат,  як  і

            попередня  версія.  Проте,  в  даному  випадку  дочірній  потік
            створюється  за  допомогою  об’єкта  класу  MyThread,  який  є
            нащадком класу Thread.

                  Логічним  буде  запитання,  чому  Java  пропонує  два  способи
            створення  дочірніх  потоків  і  який  із  них  кращий.  Клас  Thread
            визначає  декілька  методів,  які  можуть  бути  перевизначені  в

            похідних  класах.  З  цих  методів  тільки  один  повинен  бути
            перевизначений в обов’язковому порядку – це метод run(). Цей
            же  метод  потрібно  реалізувати  використовуючи  інтерфейс

            Runnable.  Більшість  розробників  вважають,  що  класи  слід
            розширювати  тільки  у  тих  випадках,  коли  вони  мають  бути
            вдосконалені  або  певним  чином  модифіковані.  Тому,  якщо

            перевизначати інші методи класу Thread не має необхідності, то
            рекомендується  все-таки  реалізувати  інтерфейс  Runnable.  Крім
            того, при реалізації інтерфейсу Runnable клас потоку не повинен

            наслідувати клас Thread, що дає змогу наслідувати інші класи.



                                                        168
   164   165   166   167   168   169   170   171   172   173   174