многопоточность джава. многопоточность. Класс Thread в java функциональность отдельного потока заключается в классе Thread
Скачать 340.19 Kb.
|
Наследование от класса ThreadСоздадим свой класс на основе Thread:
Класс потока называется JThread. Предполагается, что в конструктор класса передается имя потока, которое затем передается в конструктор базового класса. В конструктор своего класса потока мы можем передать различные данные, но главное, чтобы в нем вызывался конструктор базового класса Thread, в который передается имя потока. И также в JThread переопределяется метод run(), код которого собственно и будет представлять весь тот код, который выполняется в потоке. В методе main для запуска потока JThread у него вызывается метод start(), после чего начинается выполнение того кода, который определен в методе run:
Консольный вывод: Main thread started... Main thread finished... JThread started... JThread finished... Здесь в методе main в конструктор JThread передается произвольное название потока, и затем вызывается метод start(). По сути этот метод как раз и вызывает переопределенный метод run() класса JThread. Обратите внимание, что главный поток завершает работу раньше, чем порожденный им дочерний поток JThread. Аналогично созданию одного потока мы можем запускать сразу несколько потоков:
Консольный вывод: Main thread started... Main thread finished... JThread 2 started... JThread 5 started... JThread 4 started... JThread 1 started... JThread 3 started... JThread 1 finished... JThread 2 finished... JThread 5 finished... JThread 4 finished... JThread 3 finished... Ожидание завершения потокаПри запуске потоков в примерах выше Main thread завершался до дочернего потока. Как правило, более распространенной ситуацией является случай, когда Main thread завершается самым последним. Для этого надо применить метод join(). В этом случае текущий поток будет ожидать завершения потока, для которого вызван метод join:
Метод join() заставляет вызвавший поток (в данном случае Main thread) ожидать завершения вызываемого потока, для которого и применяется метод join (в данном случае JThread). Консольный вывод: Main thread started... JThread started... JThread finished... Main thread finished... Если в программе используется несколько дочерних потоков, и надо, чтобы Main thread завершался после дочерних, то для каждого дочернего потока надо вызвать метод join. |