Да, вам нужно беспокоиться о InterruptedException
, так же как вам нужно беспокоиться о любом другом проверенном исключении, которое вы должны либо сгенерировать, либо обработать.
В большинстве случаев InterruptedException
сигнализирует запрос на остановку, скорее всего из-за того, что поток, на котором выполнялся ваш код, был прерван .
В вашей конкретной ситуации с пулом соединений, ожидающим установления соединения, я бы сказал, что это проблема отмены, и вам необходимо отменить получение, очистить и восстановить флаг прерывания (см. Ниже).
Например, если вы используете какой-то Runnable
/ Callable
, работающий внутри Executor
, вам нужно правильно обработать InterruptedException:
executor.execute(new Runnable() {
public void run() {
while (true) {
try {
Thread.sleep(1000);
} catch ( InterruptedException e) {
continue; //blah
}
pingRemoteServer();
}
}
});
Это будет означать, что ваша задача никогда не подчиняется механизму прерывания, используемому исполнителем, и не допускает надлежащей отмены / отключения.
Вместо этого, правильная идиома - восстановить прерванный статус и затем остановить выполнение:
executor.execute(new Runnable() {
public void run() {
while (true) {
try {
Thread.sleep(1000);
} catch ( InterruptedException e) {
Thread.currentThread().interrupt(); // restore interrupted status
break;
}
pingRemoteServer();
}
}
});
Полезные ресурсы :