Page 241 - 6253
P. 241

виконання.  Оскільки,  не  можливо  напряму  звернутися  до  нематеріального  стану

            виконуваного  потоку,  то  робота  із  потоком  відбувається  через  його  заступника

            (proxy),  тобто  екземпляр  класу  Thread,  який  його  породив.  Щоб  створити  новий

            потік,  програма  повинна  або  реалізувати  інтерфейс  Runnable,  або  розширити  клас

            Thread.

                  Реалізація  інтерфейсу  Runnable.  Найпростіший  спосіб  створення  потоку  –  це

            оголошення  класу,  що  реалізує  інтерфейс  Runnable.  Інтерфейс  Runnable  абстрагує

            одиницю  виконуваного  коду.  Створити  новий  потік  можна  на  основі  будь-якого

            класу,  що  реалізує  інтерфейс  Runnable.  Для  цього  клас  повинен  перевизначити

            єдиний метод run(), що визначений в інтерфейсі Runnable.

                  Всередину  методу  run()  потрібно  помістити  код,  який  має  бути  виконаний  в

            новому  потоці.  При  цьому  з  методу  run()  можуть  викликатися  інші  методи,

            використовуватися об’єкти інших класів та оголошуватися змінні точно так само, як

            це відбувається в головному потоці. Єдиною його відмінністю є те, що метод run()

            встановлює  точку  входу  для  іншого,  паралельного  потоку  всередині  програми.

            Даний потік завершується, коли метод run() повертає керування основній програмі.

                  Після  того  як  створений  клас,  що  реалізує  інтерфейс  Runnable,  необхідно

            створити об’єкт типу Thread. У класі Thread визначено декілька конструкторів, один

            з  яких  приймає  на  вхід  об’єкт  класу,  що  реалізує  інтерфейс  Runnable.  Також  у

            вигляді другого аргументу в даний конструктор можна передати ім’я створюваного

            потоку.

                  Після того як новий потік буде створений, для його запуску потрібно викликати

            метод  start(),  оголошений  в  класі  Thread.  По  суті,  метод  start()  виконує  виклик

            методу run().

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

            (лістинг 10.2).



                               Лістинг 10.2 – Створення власного потоку шляхом імплементації

                                                                                        інтерфейсу Runnable

                  class MyThread implements Runnable {

                     // точка входу власного потоку
                     public void run() {


                                                              240
   236   237   238   239   240   241   242   243   244   245   246