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