Если запустить поток А, а из потока А поток В, то когда поток А завершается то завершается поток В.
Как можно этого избежать?
Т.е. чтобы поток А дождался завершения потока В.
Здравствуйте, Mr WeL, Вы писали:
MW>Привет! MW>Возник вопрос про потоки. MW>Если запустить поток А, а из потока А поток В, то когда поток А завершается то завершается поток В. MW>Как можно этого избежать?
На сколько я помню, такое поведение для Java не характерно (давно на Java не писал).
MW>Т.е. чтобы поток А дождался завершения потока В. MW>Спасибо!
У потока есть метод void join() — ждать до завершения потока, для которого он вызван. Еще есть метод bool isActive() — возвращает true если поток еще выполняется.
И вообще, такое, вроде, в книжках описывают — нафиг форум захламлять.
Здравствуйте, Mr WeL, Вы писали:
MW>Привет!
MW>Возник вопрос про потоки.
MW>Если запустить поток А, а из потока А поток В, то когда поток А завершается то завершается поток В. MW>Как можно этого избежать? MW>Т.е. чтобы поток А дождался завершения потока В.
MW>Спасибо!
Здравствуйте, Mr WeL, Вы писали:
MW>Если запустить поток А, а из потока А поток В, то когда поток А завершается то завершается поток В.
уверен?
MW>Как можно этого избежать? MW>Т.е. чтобы поток А дождался завершения потока В.
Можно сделать, чтоs, поток А не завершился пока не завершатся все порожденные им потоки. Как уже сказали — join.
MrLika пишет:
> MW>Возник вопрос про потоки. > MW>Если запустить поток А, а из потока А поток В, то когда поток А > завершается то завершается поток В. > MW>Как можно этого избежать? > > На сколько я помню, такое поведение для Java не характерно (давно на > Java не писал).
Писал совсем недавно — совершенно не характерно
--
WBR Денис Цыплаков /* ICQ UIN : 108477017 */
Знающий не говорит, говорящий не знает
Здравствуйте, Lucker, Вы писали:
L>Здравствуйте, Mr WeL, Вы писали:
MW>>Если запустить поток А, а из потока А поток В, то когда поток А завершается то завершается поток В.
L>уверен?
Нет не уверен, но результат всё время разный ...
MW>>Как можно этого избежать? MW>>Т.е. чтобы поток А дождался завершения потока В. L>Можно сделать, чтоs, поток А не завершился пока не завершатся все порожденные им потоки. Как уже сказали — join.
Здравствуйте, Mr WeL, Вы писали:
MW>Здравствуйте, Lucker, Вы писали:
L>>Здравствуйте, Mr WeL, Вы писали:
MW>>>Если запустить поток А, а из потока А поток В, то когда поток А завершается то завершается поток В.
Возможно у тебя не остается ссылки на поток B и его "съедает" сборщик мусора.
L>>уверен?
MW>Нет не уверен, но результат всё время разный ...
Очень подозрительно, Укрепляет меня в моем мнении.
MW>>>Как можно этого избежать? MW>>>Т.е. чтобы поток А дождался завершения потока В. L>>Можно сделать, чтоs, поток А не завершился пока не завершатся все порожденные им потоки. Как уже сказали — join.
Или, если я прав, не обязательно оставлять A ждать, достаточно спасти ссылку на B.
Здравствуйте, mickle_ak, Вы писали:
_>Возможно у тебя не остается ссылки на поток B и его "съедает" сборщик мусора.
_>Очень подозрительно, Укрепляет меня в моем мнении.
_>Или, если я прав, не обязательно оставлять A ждать, достаточно спасти ссылку на B.
Легче всего проверить свои "догадки".
Тогда по-твоему получается что подобная программа вообще не должна работать:
public static void main(String[] args) {
new WorkerThread().start();
}