Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Найти поток с заданным именем, не перебирая все потоки 
V
    Опции темы
Mirkes
Дата 6.1.2012, 11:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 586
Регистрация: 18.8.2011
Где: Красноярск

Репутация: 7
Всего: 17



Сразу оговорюсь, что все предложенное к прочтению - прочитал.
В теме "маленький тест" нашел способ перебора всех потоков. Однако хочется
найти единственный нужный короче.
Имя потока мне известно. Как найти поток.
Точнее задача такая
На экран вывешивается модальный диалог без кнопки завершения, отображающий результаты работы некоего потока, запущенного не из диалога.
Результаты работы (промежуточные) диалог подбирает из некоторых переменных класса, переданного диалогу как параметр.
Признак нормального завершения работы - тоже.
А вот если поток разваливается, то все виснет насмерть.
Хочется при возникновении подозрения о смерти потока проверить жив ли он. 
Если я правильно понимаю, можно проверить все потоки, и если потока с нужным именем нет, то помер.
Но это наверное долго. Хочется как-нибудь побыстрее это проверить.
Не подскажете как это сделать или где искать решение?


--------------------
Mirkes
PM MAIL   Вверх
dorogoyIV
Дата 6.1.2012, 12:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1503
Регистрация: 26.3.2007

Репутация: 3
Всего: 46



ну можно пойти от обратного - создать коллекцию потоков:
java.util.Vector <Thread> ...
перед смертью поток сообщает о своей кончине вектору, ну и т.д. ...

PM MAIL   Вверх
Mirkes
Дата 6.1.2012, 15:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 586
Регистрация: 18.8.2011
Где: Красноярск

Репутация: 7
Всего: 17



Как сообщает? Речь одет о стандартной процедуре или о настройке в потоке? Уточните пожалуйста.


--------------------
Mirkes
PM MAIL   Вверх
COVD
Дата 6.1.2012, 18:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 26.7.2005

Репутация: 17
Всего: 43



Цитата

А вот если поток разваливается, то все виснет насмерть.

Поток не "разваливается". Он блокируется и возможно блокирует другие потоки. Это deadlock. Быстро ли, медленно ли (у вас что, миллион потоков?) вы его найдете - вам это скорее всего не поможет. Вы обнаружите, что поток жив ( isAlive()=true). А надо искать место блокировки и причину.
Если вам нужна запись в лог о завершении потока, то удобно в методe run  использовать конструкцию try{ .. } finally { сообщение в лог }.

Это сообщение отредактировал(а) COVD - 6.1.2012, 18:37
PM MAIL   Вверх
Mirkes
Дата 6.1.2012, 19:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 586
Регистрация: 18.8.2011
Где: Красноярск

Репутация: 7
Всего: 17



Цитата(COVD @  6.1.2012,  18:32 Найти цитируемый пост)
Поток не "разваливается". Он блокируется и возможно блокирует другие потоки.

В моем случае речь шла о возникновении в потоке ошибки, приводящей к развалу или завершению.
Провел эксперимент.
Специально ввел в код фрагмент, приводящий к ошибке. Получил следующее сообщение в консоли
Код

Exception in thread "Learn" java.lang.NullPointerException
    at pcam.GalaPT.learnDo(GalaPT.java:711)
    at pca1.ExecMenuPane$3.run(ExecMenuPane.java:744)
    at java.lang.Thread.run(Thread.java:662)


При этом диалог вывел false на запрос isALive()

Однако это заставило меня задуматься о том, случайность это или нет?
Возник новый вопрос, если в потоке возникло исключение, он помирает? Или в некоторых ситуациях блокируется?
Подскажите пожалуйста.


--------------------
Mirkes
PM MAIL   Вверх
COVD
Дата 6.1.2012, 20:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 26.7.2005

Репутация: 17
Всего: 43



если в run() выброшено исключение, и оно не перехвачено, то поток умирает: isALive()=false, выполнение метода run завершено. Это ваш пример илюстрирует.
PM MAIL   Вверх
Mirkes
Дата 6.1.2012, 20:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 586
Регистрация: 18.8.2011
Где: Красноярск

Репутация: 7
Всего: 17



Спасибо. Меня такое положение дел устраивает.


--------------------
Mirkes
PM MAIL   Вверх
dobrolub
Дата 6.1.2012, 21:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 385
Регистрация: 18.12.2009
Где: Vancouver, Canada

Репутация: 11
Всего: 16



для поиска deadlocked Threads посмотри на стандартный java.lang.management.ThreadMXBean
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0922 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.