[java] 인터럽트(Interrupt)란 무엇인가?

자바에서 인터럽트는 스레드(쓰레드)의 실행을 강제로 중단시키는 방법입니다. 스레드는 일반적으로 무한 루프나 긴 작업을 수행하므로, 특정 조건을 충족했을 때 스레드를 중지시키기 위해 인터럽트를 사용할 수 있습니다.

인터럽트는 애플리케이션이나 다른 스레드로부터 스레드에게 신호를 보내는 것으로 생각할 수 있습니다. 이 신호를 받은 스레드는 즉시 실행을 중지하고, 이 후에 어떻게 처리할지에 대한 제어를 받습니다.

일반적으로 인터럽트는 스레드가 실행중인 상태에서 호출되며, 인터럽트를 받은 스레드는 InterruptedException 이라는 예외를 던집니다. 이 예외를 처리함으로써 스레드는 인터럽트에 대한 적절한 응답을 할 수 있습니다.

인터럽트는 스레드 간의 협력적인 작업을 위해 매우 유용한 도구입니다. 예를 들어, 메인 스레드가 작업 스레드를 중지시킴으로써 작업을 시간 제한 안에 완료하도록 할 수 있습니다. 또한, 인터넷 연결이 끊긴 경우 인터럽트를 사용하여 블로킹 작업을 중단시켜 애플리케이션의 응답성을 개선할 수도 있습니다.

아래는 인터럽트를 사용하는 간단한 예제 코드입니다.

public class InterruptExample implements Runnable {
    
    public void run() {
        while(!Thread.currentThread().isInterrupted()) {
            // 스레드 작업 수행
            
            try {
                Thread.sleep(1000);
            } catch(InterruptedException e) {
                // 인터럽트 예외 처리
            }
        }
    }
    
    public static void main(String[] args) {
        Thread t = new Thread(new InterruptExample());
        t.start();
        
        // 스레드를 중지시키기 위한 인터럽트 호출
        t.interrupt();
    }
}

위 예제 코드에서는 스레드 실행 중에 isInterrupted() 메서드를 사용하여 인터럽트 상태를 확인하고, sleep() 메서드를 사용하여 일정 시간마다 작업을 중지하도록 하였습니다. 인터럽트가 발생하면 InterruptedException 예외가 발생하며, 이 예외를 처리하여 스레드가 적절히 종료될 수 있도록 합니다.

더 자세한 내용은 Java API 문서를 참조하세요.