Page 132 - 4868
P. 132

Ошибка! Стиль не определен.                                                              130

               звернутися  до  нематеріального  стану  виконуваного  потоку,  то  робота  із
               потоком відбувається через його заступника (proxy), тобто екземпляр класу
               Thread,  який  його  породив.  Щоб  створити  новий  потік,  програма  повинна
               або реалізувати інтерфейс Runnable, або розширити клас Thread.

                     Реалізація  інтерфейсу  Runnable.  Найпростіший  спосіб  створення
               потоку – це оголошення класу, що реалізує інтерфейс Runnable. Інтерфейс
               Runnable  абстрагує  одиницю  виконуваного  коду.  Створити  новий  потік
               можна  на  снові  будь-якого  класу,  що  реалізує  інтерфейс  Runnable.  Для
               цього  клас  повинен  перевизначити  єдиний  метод  run(),  що  визначений  в
               інтерфейсі Runnable.
                     Всередину  методу  run()  потрібно  помістити  код,  який  має  бути
               виконаний в новому потоці. При цьому з методу run() можуть викликатися
               інші  методи,  використовуватися  об’єкти  інших  класів  та  оголошуватися
               змінні точно так само, як це відбувається в головному потоці. Єдиною його
               відмінністю  є  те,  що  метод  run()  встановлює  точку  входу  для  іншого,
               паралельного  потоку  всередині  програми.  Даний  потік  завершується,  коли
               метод run() повертає керування основній програмі.
                     Після  того  як  створений  клас,  що  реалізує  інтерфейс  Runnable,
               необхідно створити об’єкт типу Thread. У класі Thread визначено декілька
               конструкторів,  один  з  яких  приймає  на  вхід  об’єкт  класу,  що  реалізує
               інтерфейс  Runnable.  Також  у  вигляді  другого  аргументу  в  даний
               конструктор можна передати ім’я створюваного потоку.
                     Після  того  як  новий  потік  буде  створений,  для  його  запуску  потрібно
               викликати  метод  start(),  оголошений  в  класі  Thread.  По  суті,  метод

               start() виконує виклик методу run().
                     Розглянемо  приклад,  що  створює  новий  потік  і  запускає  його  на
               виконання (лістинг 2.4).

                     Лістинг  2.4  –  Створення  власного  потоку  шляхом  імплементації
               інтерфейсу Runnable
                     class MyThread implements Runnable {
                       // точка входу власного потоку
                       public void run() {
                         try {
                           for (int i = 5; i > 0; i--) {
                             System.out.println("Дочірній потік:" + i);
                             Thread.sleep(500);
                           }
                         } catch (InterruptedException e) {
                           System.out.println("Дочірній потік перерваний");
                         }
                         System.out.println("Дочірній потік завершений");
                       }
                     }
                     public class Main {
   127   128   129   130   131   132   133   134   135   136   137