특정 메서드가 InterruptedException을 발생시킬 수 있다는 것은 해당 메서드가 블러킹 메서드라는 의미다.

메서드에 인터럽트가 걸리면 해당 메서드를 대기 중인 상태에서 깨어나고자 노력한다. 모든 스레드에는 인터럽트가 걸린 상태인지 알려주는 상태 값이 있으며 외부에서 인터럽트를 걸면 이 값이 true 로 설정된다.

InterruptedExceotion 의 처리

(1) InterruptedException 을 전달

(2) 인터럽트를 무시하고 복구

(3) 하지 말아야 할 짓(!)

public class MyTask implements Runnable {
    private BlockingQueue<MyJob> jobs;
  
    public void run() {
        try {
            // 어떤 블로킹 메서드 수행
            myConsume(jobs.take());
        } catch (InterruptedException e) {
            // 상위 호출 메서드에게 인터럽트 전달
            Thread.currentThread().interrupt();
        }
    }
}

참고자료