Кто прерывает мой поток?

Я понимаю то, что делает InterruptedException и почему он брошен. Однако в моем приложении я получаю его при ожидании SwingUtilities.invokeAndWait() на потоке, который только известен моим приложением, и никогда не звонит мое приложение Thread.interrupt() на любом потоке также это никогда не передает ссылку потока никому.

Таким образом, мой вопрос: Кто прерывает мой поток?

Там какой-либо путь состоит в том, чтобы сказать? Существует ли причина, почему InterruptedException не содержит название Потока, который запрашивает прерывание?

Я считал, что это могла быть платформа или библиотека, которая делает это, мы используем следующее, но я не могу думать о причине для них прервать мой поток:

  • Быть в спящем режиме
  • Spring
  • Log4J
  • Коннектор Mysql
12
задан Riduidel 19 March 2010 в 09:15
поделиться

3 ответа

Если возможно, вы можете расширить Thread и перезаписать метод interrupt () для этого потока, чтобы распечатать stacktrace или вызвать исключение неподдерживаемой операции.

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

11
ответ дан 2 December 2019 в 19:53
поделиться

Здесь есть что-то странное.

Из javadoc для invokeAndWait, InterruptedException выбрасывается

если нас прерывают, пока мы ждем, пока поток диспетчеризации событий закончит выполнение doRun.run()

Вы пытались посмотреть, посылает ли код, выполняемый в EDT, какое-либо исключение? Или код в этом EDT пытается модифицировать некоторые переменные этого потока (я знаю, что этот термин не является "ортодоксальным" в языке java, но я надеюсь, вы понимаете, что я имею в виду: любой код, подразумевающий synchronized, wait, join, ...

2
ответ дан 2 December 2019 в 19:53
поделиться

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

В данном случае вы можете поставить точку останова на Thread.interrupt(). Если есть другие потоки, которые тоже прерываются (так что у вас есть "ложные срабатывания" точки останова), вы можете добавить условие точки останова (большинство IDE позволяют сделать это легко), например, проверяя имя потока.

4
ответ дан 2 December 2019 в 19:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: