Анализ многопоточного приложения Java

В приложении с открытым исходным кодом, в котором я участвую, у нас есть ошибка, при которой приложение не всегда закрывается должным образом. Вот что я хотел бы решить.

Опыт показал, что это происходит в большинстве случаев, когда потоки и процессы запускаются, но не управляются правильно (например,грамм. поток ожидает подключения к сокету, приложение закрывается, а поток продолжает ждать).
Имея это в виду, я искал '.start ()' во всем исходном коде и нашел 53 вхождения (что меня немного напугало).
В качестве первого шага я хотел создать вспомогательный класс (ThreadExecutor), в котором текущий код thread.start () был бы заменен на ThreadExecutor.Execute (thread), чтобы иметь) только несколько изменений в существующем исходном коде и б) один класс, в котором я могу легко проверить, какие потоки не заканчиваются должным образом. Для этого я хотел

  • добавить поток, который будет выполняться, в список с именем activeThreads при вызове метода Execute
  • запустить поток
  • удалить его из списка activeThreads, когда он завершится.

Таким образом, у меня был бы обновленный список всех выполняющихся потоков, и когда приложение зависает при завершении работы, я мог видеть там, какой поток (-ы) вызывает (-ы) его.

Вопросы:

  • Что вы думаете о концепции? Обычно я кодирую C # и знаю, как бы это сделать, используя .NET с рабочими, но я не совсем уверен, что лучше всего в Java (я бы хотел изменить как можно меньше строк кода в существующем исходном коде).
  • Если концепция кажется правильной, как я могу получить уведомление о завершении потока. Я бы не хотел, чтобы дополнительный поток время от времени проверял состояние всех потоков, содержащихся в activeThreads, чтобы удалить их, если они завершились.

Просто для пояснения: прежде чем выяснять, как правильно завершить приложение, я спрашиваю здесь, какой лучший / самый простой способ определить, какие потоки являются причиной для определенных тестовых случаев, которые довольно трудно воспроизвести.

5
задан Philippe 17 November 2011 в 15:05
поделиться