Программирование на JAVA
Меню :
Стартовая
Основы программирования
Программирование на JAVA
Программирование на C++
Программирование на Pascal
Задачи по программированию
Такие обслуживающие потоки называют демонами (daemon), это свойство можно установить любому потоку. В итоге приложение выполняется до тех пор, пока есть хотя бы один поток не-демон.
Рассмотрим, как потоки реализованы в Java.
Базовые классы для работы с потоками Класс Thread
Поток выполнения в Java представляется экземпляром класса Thread. Для того, чтобы написать свой поток исполнения, необходим0 наследоваться от этого класса и переопределить метод run(). Например.
public class MyThread extends Thread { public void run() {
// некоторое долгое действие, вычисление long sum=0;
for (int i=0; i<1000; i++) { sum+=i;
}
System.out.println(sum);
}
}
Метод run() содержит действия, которые должны выполняться в иодом потоке исполнения. Чтобы запустить его, необходимо создать экземпляр класса-наследника и вызвать унаследованный метод start(), который сообщает виртуальной машине, что требуется запустить новый поток исполнения и начать выполнять в нем метод run().
MyThread t = new MyThread(); t.start();
В результате чего на консоли появится результат: 499500
Когда метод run() завершен (в частности, встретилось выражение return), поток выполнения останавливается. Однако ничто не препятствует записи бесконечного цикла в этом методе. В результате поток не прервет своего исполнения и будет остановлен только при завершении работы всего приложения.
Интерфейс Runnable
Описанный подход имеет один недостаток. Поскольку в Java множественное наследование отсутствует, требование наследоваться от Thread Может привести к конфликту. Если еще раз посмотреть на приведенный Вьпле пример, станет понято, что наследование производилось только с Целью переопределения метода run(). Поэтому предлагается более простой способ создать свой поток исполнения. Достаточно реализовать интерфейс Runnable, в котором объявлен только один метод - уже знаковый void run(). Запишем пример, приведенный выше, с помощью этого ^ерфейса:
public class MyRunnable implements Runnable { public void run() {
// некоторое долгое действие, вычисление long sum=0;
for (inti=0; i<1000; i++) { sum+=i;
}
System, out. println(sum);
}
}
Также незначительно меняется процедура запуска потока:
Runnable г = new MyRunnable(); Thread t = new Thread(r); t.start();
Если