Page 166 - 6571
P. 166

18.2 Створення власних потоків

                               (клас Thread та інтерфейс Runnable)


                        Багатопотокова  модель  Java  побудована  на  основі  класу
                  Thread, його методів та інтерфейсу Runnable, що реалізує клас

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

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

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

                  Runnable.           Інтерфейс           Runnable            абстрагує         одиницю
                  виконуваного коду. Створити новий потік можна на основі будь-
                  якого  класу,  що  реалізує  інтерфейс  Runnable.  Для  цього  клас

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

                        Всередину  методу  run()  потрібно  помістити  код,  який  має
                  бути  виконаний  в  новому  потоці.  При  цьому  з  методу  run()
                  можуть  викликатися  інші  методи,  використовуватися  об’єкти
                  інших  класів  та  оголошуватися  змінні  точно  так  само,  як  це

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

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

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

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

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




                                                             165
   161   162   163   164   165   166   167   168   169   170   171