Применение методов isAlive() и join() Java

Применение методов isAlive() и join() Java

Нередко требуется, чтобы главный поток исполнения завершался последним. С этой целью метод sleep() вызывался в предыдущих примерах из метода main() с достаточной задержкой, чтобы все дочерние потоки исполнения завершились раньше главного.

Но это неудовлетворительное реше­ние, вызывающее следующий серьезный вопрос: откуда одному потоку исполне­ния известно, что другой поток завершился? Правда, в классе Thread предостав­ляется средство, позволяющее разрешить этот вопрос.

Определить, был ли поток исполнения завершен, можно двумя способами. Во­ первых, для этого потока можно вызвать метод isAlive(), определенный в классе Thread. Ниже приведена общая форма этого метода:

Метод isAlive() возвращает логическое значение true, если поток, для кото­рого он вызван, еще исполняется. В противном случае он возвращает логическое значение false.

И во-вторых, в классе Thread имеется метод join(), который применяется чаще, чем метод isAlive(), чтобы дождаться завершения потока исполнения.

Ниже приведена общая форма этого метода:

Этот метод ожидает завершения того потока исполнения, для которого он вы­зван. Его имя отражает следующий принцип: вызывающий поток ожидает, когда указанный поток присоединится к нему.

Дополнительные формы метода jоin() по­зволяют указывать максимальный промежуток времени , в течение которого тре­буется ожидать завершения указанного потока исполнения.

Ниже приведена усовершенствованная версия программы из предыдущего примера, где с помощью метода join() гарантируется, что главный поток завер­шится последним. В данном примере демонстрируется также применение метода isAlive().

Ниже приведен результат, в ы водимый данной программой ( у вас он может ока­заться иным в зависимости от конкретной исполняющей среды ).

Как видите, потоки прекращают исполнение после того, как вызовы метода join() возвращают управление.