Потоки Создание и запуск потока

поток (thread) — это путь программного выполнения. Большинство программ, написанных сегодня, запускаются одним потоком, проблемы начинают возникать, когда несколько событий или действий должны произойти в одно время. Потоки позволяют нам это сделать.

Создание потоков. Создатели Java предоставили две возможности создания потоков: реализовать (implementing) интерфейс и расширить (extending) класс. Расширение класса это путь наследования методов и переменных класса родителя. В этом случае можно наследоваться только от одного родительского класса. Это ограничение внутри Java можно побороть реализацией интерфейса, который является наиболее распространённым способом создания потоков. (Заметим, что способ наследования позволяет только запустить класс как поток. Это позволяет классу только выполнить start() и т.п.). Интерфейсы дают возможность программистам заложить фундамент одного класса. Они используются для разработки требований к набору классов для реализации. Интерфейс устанавливает правила Разные наборы классов, которые реализуют интерфейс, должны следовать этим правилам.

Есть некоторые отличия между классом и интерфейсом Во-первых, интерфейс может только содержать абстрактные методы и/или static final переменные (константы). Классы, с другой стороны, могут реализовывать методы и содержать переменные, которые не выступают в качестве констант. Во-вторых, интерфейс не может реализовывать никаких методов. Класс, который реализовывает интерфейс, должен реализовать все методы, которые описаны в интерфейсе. У интерфейса есть возможность расширяться за счёт других интерфейсов, и (в отличие от классов) могут расширяться от нескольких интерфейсов. К тому же, экземпляр интерфейса не может быть создан, используя, оператор new; например, Runnable a = new RunnableQ; не разрешается. Для первого способа создания потока необходимо просто наследоваться от класса Thread. Делайте так, только если классу нужно только выполниться как отдельному потоку и никогда не понадобиться наследоваться от другого класса.

Запуск и останоека.Запуск и остановка с использованием маленького applet; который содержит поток доя иллюстрации этих механизмов:

LounterThread example and Source code

В этом случае, класс CounterThread был вынужден реализовать интерфейс Runnnable, что бы дальше была возможность расширить класс Applet. Все апплеты начинают свою работу с метода init(), переменная Сout инициализируется нулём и создается новый объект класса Thread. Передавая this в конструктор класса Thread, таким образом, новый поток будет знать какой объект запускается. В этом случает this это ссылка на CounterThread. После того как поток создан его нужно запустить. Вызываем метод start0, который в свою очередь вызывает метод run() объекта CounterThread, то есть CounterThread.run0- Сразу выполниться метод start() и в это же время начнет свою работу поток. Заметим, что в методе run() бесконечный цикл. Он бесконечен, потому что, как только выполниться метод run0, то поток закончит работу. Метод runO будет инкрементировать переменную Count; ожидать (sleep) 10 секунд и посылать запрос на обновление экрана алплета. Замети м, что вызова метода sleep именно в потоке является очень важным Если это не так, то программа займет всё процессорное время для своего процесса и не даст возможности любым другим методам выполниться. Другой способ остановить выполнение потока это вызвать метод stop О.. Потоки позволяют любым программам выполнять несколько задач как одну.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: