| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java: Общие вопросы > Контроль работы потока |
| Автор: filipp76 5.5.2007, 18:48 | ||
| Как проверить активный поток или нет, вернее живой или нет. Например у меня есть поток "А", в нем есть "бесконечный" цикл, по ходу выполнения методов в цикле могут возникать ошибки я просто за всем не услежу. Мне необходимо чтоб другой поток "B" мониторил работу первого, тоесть проверял если он мертв то запустить его еще раз. Я копался и не нашел такой проверки. Я могу получить имя потока, но метода как проверить жив поток или нет по имени я не нашел...((. Помогите пожалуйста разобратся. Еще хотел бы ваш совет по этому кусочку кода, насколько правильно он написан:
Мне надо после всех операторов в цикле при заходе на "второй круг" приостанавливать его работу на n количество времени. Я правильно это реализовал или есть более грамотный способ? Заранее спасибо! |
| Автор: Predator83 5.5.2007, 22:11 | ||
Из документации Sun
|
| Автор: filipp76 5.5.2007, 22:22 | ||
Как проверить этот статус из другого потока? Есть поток А, мне надо проверить из потока В жив А или нет. А получается что вызвать метод isAlive я могу только с потока А. Или я чтот не понимаю.
Получается написать так в потоке А. Только как узнать это значение с потока В не знаю. |
| Автор: Predator83 5.5.2007, 22:33 |
Почему? Приведи полностью код как ты запускаешь потоки. |
| Автор: LSD 5.5.2007, 23:34 |
Очень просто Чтобы из потока В узнать, жив ли поток А, поток В должен иметь ссылку на поток А. |
| Автор: filipp76 6.5.2007, 11:06 | ||||||
| А как эту ссылку получить? Вообще не умею с этим работать, у меня одна книга там в разделе "Потоки" я этого не нашел. Поток я запускаю так
Он запускается в главном main классе. Это и есть поток "А". Дальше запускается другой поток "В" в котором и надо проверять жив "А" или нет. Я могу в потоке "А" например присвоить ему(потоку) уникальное имя, например:
Но как использовать это имя для получения свойств(isAlive,isInterrupted и т.д.) конкретного потока с любого места кода я не знаю..( Еще хотел бы ваш совет по этому кусочку кода, насколько правильно он написан:
Есть ли более правильный способ приостановить поток на некоторое время? Заранее спасибо! |
| Автор: LSD 6.5.2007, 11:15 |
| Создай свой класс унаследованный от Thread, и передавай ему в конструктор ссылку на поток у которого он должен проверять isAlive(). |
| Автор: LSD 6.5.2007, 12:08 |
| Ну если тебе лень делать по человечески и просто передать в clNewTab ссылку на нужный поток То можешь брать ThreadGroup получать все потоки и проверять у которого из них имя равно Message_Daemon, но этот способ во первых через Ж, а во вторых не на 100% гарантирует результат. Если поток завершится до того как ты его начнешь искать, то ты его просто не найдешь (ThreadGroup храняться только живые потоки, или те которые еще не были запущены). |
| Автор: filipp76 6.5.2007, 12:52 | ||
Мне не лень я просто не знаю как это сделать((. Подскажите пожалуйста, на примере моего потока, какое поле нужно еще добавить в конструктор и что туда передать при создании потока?...Буду очень признателен. |