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 - перехватить такие исключения и вернуть поток обратно в прерванное состояние.

Другие вопросы по тегам