스레드 인터럽트는 자바에서 다중 스레드를 사용할 때 특정 스레드를 다른 스레드로부터 강제로 중단시키는 기능입니다. 이는 스레드가 실행 중이거나 대기 중일 때 다른 스레드가 해당 스레드를 중단시킬 수 있는 방법을 제공합니다.
스레드 인터럽트 메서드
자바에서는 Thread
클래스에서 제공하는 몇 가지 메서드를 사용하여 스레드를 인터럽트할 수 있습니다.
-
interrupt()
: 해당 스레드를 인터럽트합니다. 이 메서드를 호출하면 스레드의interrupted
플래그가true
로 설정됩니다. -
isInterrupted()
: 스레드의 인터럽트 상태를 확인합니다.interrupt()
메서드를 호출하여 인터럽트가 발생했는지 확인할 수 있습니다. -
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초 후에 해당 스레드를 인터럽트하도록 설정되어 있습니다.
마무리
스레드 인터럽트는 자바에서 다중 스레드 환경에서 스레드를 중단시킬 수 있는 유용한 기능입니다. 스레드 인터럽트 메서드를 적절하게 활용하여 스레드 간의 원할한 상호작용을 구현할 수 있습니다.