<< ПредыдущаяОглавлениеСледующая >>


10.3. Интерфейс Runnable

Как можно создать еще один подпроцесс? Для этого нам понадобится другой экземпляр класса Thread. При создании нового объекта Thread ему нужно указать, какой программный код он должен выполнять. Вы можете запустить подпроцесс с помощью любого объекта, реализующего интерфейс Runnable. Для того чтобы реализовать этот интерфейс, класс должен предоставить определение метода run. Ниже приведен пример, в котором создается новый подпроцесс.

class ThreadDemo implements Runnable {
ThreadDemo() {
Thread ct = Thread.currentThread();
System.out.println("currentThread: " + ct);
Thread t = new Thread(this, "Demo Thread");
System.out.println("Thread created: " +1);
t.start();
try {
Thread.sleep(3000);
}
catch (InterruptedException e) {
System.out.println("прерывание");
}
System.out.println("Выход из main подпроцесса");
}
public void run() {
try {
for (int i = 5; i > 0; i--) {
System.out.println("" + i);
Thread.sleep(l000);
}
}

catch (InterruptedException e) {
System.out.println("child прерван");
}
System.out.println("Выход из child подпроцесса ");
}
public static void main(String args[]) {
new ThreadDemo();
}
}

Обратите внимание на то, что цикл внутри метода run выглядит точно так же, как и в предыдущем примере, только на этот раз он выполняется в другом подпроцессе. Подпроцесс main с помощью оператора new Thread(this, "Demo Thread") создает новый объект класса Thread, причем первый параметр конструктора — this — указывает, что мы хотим вызвать метод run текущего объекта. Затем мы вызываем метод start, который запускает подпроцесс, выполняющий метод run. После этого основной подпроцесс (main) переводится в состояние ожидания на три секунды, затем выводит сообщение и завершает работу. Второй подпроцесс — «Demo Thread» — при этом по-прежнему выполняет итерации в цикле метода run до тех пор, пока значение счетчика цикла не уменьшится до нуля. Ниже показано, как выглядит результат работы этой программы после того, как она отработает 5 секунд.

С:\> java ThreadDemo
Thread created: Thread[Demo Thread,5,main]
5
4
3
Выход из main подпроцесса
2
1
Выход из child подпроцесса

 



<< ПредыдущаяОглавлениеСледующая >>