Якщо " InterruptedException
кинуто", це означає, що щось хоче перервати (зазвичай припинити) цю нитку. Це ініціюється викликом interrupt()
методу потоків . Метод очікування виявляє це і видає InterruptedException
так, що код уловки може негайно обробити запит на припинення, і не потрібно чекати, поки закінчиться вказаний час.
Якщо ви використовуєте його в однопотоковому додатку (а також у деяких багатопотокових програмах), це виключення ніколи не буде запущено. Ігнорувати це, маючи порожній пункт про вилов, я б не рекомендував. Закидання InterruptedException
очищає перерваний стан потоку, тому, якщо не обробляється належним чином, інформація втрачається. Тому я б запропонував запустити:
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
// code for stopping current task so thread stops
}
Що знову встановлює цей стан. Після цього закінчіть виконання. Це була б правильна поведінка, навіть жорстка ніколи не використовується.
Що може бути краще, це додати:
} catch (InterruptedException e) {
throw new RuntimeException("Unexpected interrupt", e);
}
... заява до блоку лову. Це в основному означає, що це ніколи не повинно відбуватися. Тож якщо код буде повторно використаний у середовищі, де це може статися, він скаржиться на нього.