currentThread().interrupt() внутри блока перехвата InterruptedException?
Читая чужой код, я наткнулся на следующее:
class Worker extends Thread {
....
public void run() {
try {
while ( true ) {
..... DO WORK .....
}
} catch ( InterruptedException e ) {
Thread.currentThread().interrupt();
} catch ( RuntimeException e ) {
handleFatal( e );
}
}
}
Каков эффект от звонка Thread.currentThread().interrupt()
внутри блока захвата?
Наверняка текущий запущенный поток - это экземпляр Worker
- уже прервано в этот момент? Какую цель он служит для вызова interrupt()
снова в уже прерванной теме?
1 ответ
InterruptedException
не означает, что поток находится в прерванном состоянии. Это означает, что поток перешел в прерванное состояние, а затем метод опроса (например, Object.wait
или же Thread.sleep
) проверяет, находился ли поток в прерванном состоянии (это выводит поток из прерванного состояния) и выдает исключение. Поэтому, когда исключение перехвачено, поток больше не находится в прерванном состоянии.
Похоже, что цель этого блока catch - перехватить такие исключения и вернуть поток обратно в прерванное состояние.