![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
Mirkes |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 586 Регистрация: 18.8.2011 Где: Красноярск Репутация: 7 Всего: 17 |
Сразу оговорюсь, что все предложенное к прочтению - прочитал.
В теме "маленький тест" нашел способ перебора всех потоков. Однако хочется найти единственный нужный короче. Имя потока мне известно. Как найти поток. Точнее задача такая На экран вывешивается модальный диалог без кнопки завершения, отображающий результаты работы некоего потока, запущенного не из диалога. Результаты работы (промежуточные) диалог подбирает из некоторых переменных класса, переданного диалогу как параметр. Признак нормального завершения работы - тоже. А вот если поток разваливается, то все виснет насмерть. Хочется при возникновении подозрения о смерти потока проверить жив ли он. Если я правильно понимаю, можно проверить все потоки, и если потока с нужным именем нет, то помер. Но это наверное долго. Хочется как-нибудь побыстрее это проверить. Не подскажете как это сделать или где искать решение? -------------------- Mirkes |
|||
|
||||
dorogoyIV |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1503 Регистрация: 26.3.2007 Репутация: 3 Всего: 46 |
ну можно пойти от обратного - создать коллекцию потоков:
java.util.Vector <Thread> ... перед смертью поток сообщает о своей кончине вектору, ну и т.д. ... |
|||
|
||||
Mirkes |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 586 Регистрация: 18.8.2011 Где: Красноярск Репутация: 7 Всего: 17 |
Как сообщает? Речь одет о стандартной процедуре или о настройке в потоке? Уточните пожалуйста.
-------------------- Mirkes |
|||
|
||||
COVD |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 26.7.2005 Репутация: 17 Всего: 43 |
Поток не "разваливается". Он блокируется и возможно блокирует другие потоки. Это deadlock. Быстро ли, медленно ли (у вас что, миллион потоков?) вы его найдете - вам это скорее всего не поможет. Вы обнаружите, что поток жив ( isAlive()=true). А надо искать место блокировки и причину. Если вам нужна запись в лог о завершении потока, то удобно в методe run использовать конструкцию try{ .. } finally { сообщение в лог }. Это сообщение отредактировал(а) COVD - 6.1.2012, 18:37 |
|||
|
||||
Mirkes |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 586 Регистрация: 18.8.2011 Где: Красноярск Репутация: 7 Всего: 17 |
В моем случае речь шла о возникновении в потоке ошибки, приводящей к развалу или завершению. Провел эксперимент. Специально ввел в код фрагмент, приводящий к ошибке. Получил следующее сообщение в консоли
При этом диалог вывел false на запрос isALive() Однако это заставило меня задуматься о том, случайность это или нет? Возник новый вопрос, если в потоке возникло исключение, он помирает? Или в некоторых ситуациях блокируется? Подскажите пожалуйста. -------------------- Mirkes |
||||
|
|||||
COVD |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 26.7.2005 Репутация: 17 Всего: 43 |
если в run() выброшено исключение, и оно не перехвачено, то поток умирает: isALive()=false, выполнение метода run завершено. Это ваш пример илюстрирует.
|
|||
|
||||
Mirkes |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 586 Регистрация: 18.8.2011 Где: Красноярск Репутация: 7 Всего: 17 |
Спасибо. Меня такое положение дел устраивает.
-------------------- Mirkes |
|||
|
||||
dobrolub |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 385 Регистрация: 18.12.2009 Где: Vancouver, Canada Репутация: 11 Всего: 16 |
для поиска deadlocked Threads посмотри на стандартный java.lang.management.ThreadMXBean
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |