특정 메서드가 InterruptedException을 발생시킬 수 있다는 것은 해당 메서드가 블러킹 메서드라는 의미다.
메서드에 인터럽트가 걸리면 해당 메서드를 대기 중인 상태에서 깨어나고자 노력한다. 모든 스레드에는 인터럽트가 걸린 상태인지 알려주는 상태 값이 있으며 외부에서 인터럽트를 걸면 이 값이 true 로 설정된다.
public class MyTask implements Runnable {
private BlockingQueue<MyJob> jobs;
public void run() {
try {
// 어떤 블로킹 메서드 수행
myConsume(jobs.take());
} catch (InterruptedException e) {
// 상위 호출 메서드에게 인터럽트 전달
Thread.currentThread().interrupt();
}
}
}