Я думаю, что ваше InterruptedException съедается где-то в вашем стеке вызовов.
Этот шаблон меня беспокоит:
try {
Thread.sleep(250);
} catch (InterruptedException e) {
break;
}
Если вы используете подобный шаблон в вашем коде, то состояние прерывания потока было потеряно. Например, если Thread.interrupted()
использовалось в вашем стеке вызовов, это сбросит прерванный статус вашего потока . В результате ваш цикл while никогда не завершится: статус был сброшен в false.
Эти две строки вызывают озабоченность:
Transmission tx = FieldFrontService.this._qRec.poll();
// ....
FieldFrontService.this._receiveTransmission(tx);
Если какой-либо из этих вызовов вызовет Thread.currentThread().interrupted()
, вы потеряете логическое значение isInterrupted
. Я бы посмотрел реализацию обоих этих методов на случай, если используется исключение / состояние.
Моя обработка InterruptedExceptions отличается. Я предпочитаю отбрасывать прерывание:
try {
Thread.sleep(250);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
Таким образом, я гарантирую, что нет никакой возможности, что мое прерывание было потеряно. По сути, я пытаюсь сказать, нет, серьезно, STOP Thread STOP!