Про потоки
От: Mr WeL Россия  
Дата: 03.06.06 07:02
Оценка:
Привет!

Возник вопрос про потоки.

Если запустить поток А, а из потока А поток В, то когда поток А завершается то завершается поток В.
Как можно этого избежать?
Т.е. чтобы поток А дождался завершения потока В.

Спасибо!
Re: Про потоки
От: MrLika  
Дата: 03.06.06 07:29
Оценка:
Здравствуйте, Mr WeL, Вы писали:

MW>Привет!

MW>Возник вопрос про потоки.
MW>Если запустить поток А, а из потока А поток В, то когда поток А завершается то завершается поток В.
MW>Как можно этого избежать?

На сколько я помню, такое поведение для Java не характерно (давно на Java не писал).

MW>Т.е. чтобы поток А дождался завершения потока В.

MW>Спасибо!

У потока есть метод void join() — ждать до завершения потока, для которого он вызван. Еще есть метод bool isActive() — возвращает true если поток еще выполняется.

И вообще, такое, вроде, в книжках описывают — нафиг форум захламлять.
Re: Про потоки
От: TheOldMan  
Дата: 03.06.06 10:09
Оценка: +1
Здравствуйте, Mr WeL, Вы писали:

MW>Привет!


MW>Возник вопрос про потоки.


MW>Если запустить поток А, а из потока А поток В, то когда поток А завершается то завершается поток В.

MW>Как можно этого избежать?
MW>Т.е. чтобы поток А дождался завершения потока В.

MW>Спасибо!


Попробуй thread.setDaemon(true);
суть в простоте, а простота в сути
Re: Про потоки
От: Lucker Беларусь http://lucker.intervelopers.com/
Дата: 04.06.06 15:48
Оценка:
Здравствуйте, Mr WeL, Вы писали:

MW>Если запустить поток А, а из потока А поток В, то когда поток А завершается то завершается поток В.


уверен?

MW>Как можно этого избежать?

MW>Т.е. чтобы поток А дождался завершения потока В.
Можно сделать, чтоs, поток А не завершился пока не завершатся все порожденные им потоки. Как уже сказали — join.
Re[2]: Про потоки
От: Денис Цыплаков Россия  
Дата: 05.06.06 05:05
Оценка:
MrLika пишет:

> MW>Возник вопрос про потоки.

> MW>Если запустить поток А, а из потока А поток В, то когда поток А
> завершается то завершается поток В.
> MW>Как можно этого избежать?
>
> На сколько я помню, такое поведение для Java не характерно (давно на
> Java не писал).

Писал совсем недавно — совершенно не характерно

--
WBR Денис Цыплаков /* ICQ UIN : 108477017 */
Знающий не говорит, говорящий не знает
Posted via RSDN NNTP Server 2.0
Re[2]: Про потоки
От: Mr WeL Россия  
Дата: 05.06.06 07:53
Оценка:
Здравствуйте, Lucker, Вы писали:

L>Здравствуйте, Mr WeL, Вы писали:


MW>>Если запустить поток А, а из потока А поток В, то когда поток А завершается то завершается поток В.


L>уверен?


Нет не уверен, но результат всё время разный ...

MW>>Как можно этого избежать?

MW>>Т.е. чтобы поток А дождался завершения потока В.
L>Можно сделать, чтоs, поток А не завершился пока не завершатся все порожденные им потоки. Как уже сказали — join.

Спасибо.
Re[3]: Про потоки
От: mickle_ak  
Дата: 08.06.06 13:16
Оценка:
Здравствуйте, Mr WeL, Вы писали:

MW>Здравствуйте, Lucker, Вы писали:


L>>Здравствуйте, Mr WeL, Вы писали:


MW>>>Если запустить поток А, а из потока А поток В, то когда поток А завершается то завершается поток В.


Возможно у тебя не остается ссылки на поток B и его "съедает" сборщик мусора.

L>>уверен?


MW>Нет не уверен, но результат всё время разный ...


Очень подозрительно, Укрепляет меня в моем мнении.


MW>>>Как можно этого избежать?

MW>>>Т.е. чтобы поток А дождался завершения потока В.
L>>Можно сделать, чтоs, поток А не завершился пока не завершатся все порожденные им потоки. Как уже сказали — join.

Или, если я прав, не обязательно оставлять A ждать, достаточно спасти ссылку на B.
Re[4]: Про потоки
От: DrZubr Беларусь  
Дата: 08.06.06 14:25
Оценка: +2
Здравствуйте, mickle_ak, Вы писали:

_>Возможно у тебя не остается ссылки на поток B и его "съедает" сборщик мусора.


_>Очень подозрительно, Укрепляет меня в моем мнении.


_>Или, если я прав, не обязательно оставлять A ждать, достаточно спасти ссылку на B.


Легче всего проверить свои "догадки".
Тогда по-твоему получается что подобная программа вообще не должна работать:
public static void main(String[] args) {
    new WorkerThread().start();
}
... << RSDN@Home 1.2.0 alpha rev. 619>>
ICQ [168117153]
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.