[java] 스레드 인터럽트의 개념

스레드 인터럽트는 자바에서 다중 스레드를 사용할 때 특정 스레드를 다른 스레드로부터 강제로 중단시키는 기능입니다. 이는 스레드가 실행 중이거나 대기 중일 때 다른 스레드가 해당 스레드를 중단시킬 수 있는 방법을 제공합니다.

스레드 인터럽트 메서드

자바에서는 Thread 클래스에서 제공하는 몇 가지 메서드를 사용하여 스레드를 인터럽트할 수 있습니다.

  1. interrupt(): 해당 스레드를 인터럽트합니다. 이 메서드를 호출하면 스레드의 interrupted 플래그가 true로 설정됩니다.

  2. isInterrupted(): 스레드의 인터럽트 상태를 확인합니다. interrupt() 메서드를 호출하여 인터럽트가 발생했는지 확인할 수 있습니다.

  3. interrupted(): 현재 스레드의 인터럽트 상태를 확인하고, interrupted 플래그를 false로 설정합니다. 이 메서드는 isInterrupted()와는 달리 정적 메서드이므로 Thread.interrupted() 형태로 사용됩니다.

스레드 인터럽트 사용 예제

아래는 스레드 인터럽트를 사용하는 예제 코드입니다.

public class InterruptExample implements Runnable {
    @Override
    public void run() {
        while (!Thread.interrupted()) {
            // 스레드 동작 코드
            System.out.println("스레드가 동작 중입니다.");

            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                // InterruptedException이 발생하면 인터럽트 상태를 확인하고 예외 처리
                System.out.println("스레드가 인터럽트되었습니다.");
                Thread.currentThread().interrupt();
            }
        }
    }

    public static void main(String[] args) {
        Thread thread = new Thread(new InterruptExample());
        thread.start();

        // 3초 후에 스레드를 인터럽트
        try {
            Thread.sleep(3000);
            thread.interrupt();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

위 예제에서 run() 메서드는 인터럽트 상태를 확인하며 동작하도록 구현되어 있습니다. InterruptedException이 발생하면 해당 스레드의 인터럽트 상태를 확인하고 중단합니다. 메인 메서드에서는 3초 후에 해당 스레드를 인터럽트하도록 설정되어 있습니다.

마무리

스레드 인터럽트는 자바에서 다중 스레드 환경에서 스레드를 중단시킬 수 있는 유용한 기능입니다. 스레드 인터럽트 메서드를 적절하게 활용하여 스레드 간의 원할한 상호작용을 구현할 수 있습니다.