[java] 자바에서 스레드를 인터럽트하는 방법은?

자바에서 스레드를 인터럽트하는 것은 다른 스레드에게 해당 스레드를 중단하라는 신호를 보내는 방법입니다. 아래는 자바에서 스레드를 인터럽트하는 방법에 대한 예제 코드입니다.

public class MyThread extends Thread {
    public void run() {
        try {
            // 스레드가 수행할 작업
            // ...
            while (!Thread.currentThread().isInterrupted()) {
                // 스레드가 인터럽트되지 않은 경우 계속 실행
                // ...
            }
        } catch (InterruptedException e) {
            // InterruptedException이 발생하면 스레드가 중단됐음을 의미
            // 필요한 처리를 수행
        }
    }
}

public class Main {
    public static void main(String[] args) {
        MyThread t = new MyThread();
        t.start();
        
        // 스레드 인터럽트
        t.interrupt();
    }
}

위의 예제 코드에서 MyThread 클래스는 Thread 클래스를 상속받아 스레드를 정의하고 있습니다. run 메서드 내부에서는 스레드가 수행할 작업을 진행하며, while 루프를 통해 스레드가 인터럽트되지 않은 경우에 계속 실행됩니다. 인터럽트가 발생하면 InterruptedException이 발생하고 해당 예외를 처리하여 스레드를 중단합니다.

메인 메서드에서는 MyThread 객체를 생성하고 start 메서드를 호출하여 스레드를 시작합니다. 그리고 t.interrupt()를 호출하여 스레드를 인터럽트합니다.

하지만 중요한 점은 스레드를 인터럽트한다고 해서 스레드가 즉시 중단되지는 않는다는 것입니다. 인터럽트가 발생하면 해당 스레드는 인터럽트 상태가 되며, 스레드 내부에서 이 상태를 체크하여 작업을 중단하도록 구현해야 합니다.

더 자세한 내용과 예제를 확인하려면 Java 공식 문서, Java Tutorials를 참고하시기 바랍니다.