○ interrupt( ) 메서드를 이용하는 방법
이번에는 interrupt( ) 메서드를 사용해 스레드를 종료하는 방법을 살펴보겠습니다. 우선 interrupt( )의 사용 방법을 요약하면, 이 interrupt( ) 메서드는 어떤 메서드가 일시 정지 상태에 있을 때 InterruptedException 예외를 발생시키고, 이를 통해 run( ) 메서드를 종료시키는 역할을 하게 됩니다.
예를 들어, ThreadA에서 ThreadB의 인스턴스를 생성하고 threadB.start( )를 실행하면 ThreadB에서 run( )이 실행됩니다. 그러다가 ThreadB의 run( ) 메서드 내의 while문 안에서 Thread.sleep(1)이 실행되는 순간 일시정지 상태가 되고, 이 때 ThreadA에서는 threadB.interrupt( )를 실행합니다. 그럼 ThreadB에서는 순간 run에서의 try를 빠져나가 catch(InterruptedException e) { }로 빠져나가게 되고, 스레드 자원정리와 함께 run( ) 메서드를 정상 종료하게 되는 것입니다.
대략 원리를 살펴보았으니, 예제를 살펴보겠습니다. PrintThread2를 실행한다음, 1초 후에 PrintThread2를 멈추도록 interrupt( ) 메서드를 호출하는 예제입니다.
public class PrintThread2 extends Thread {
public void run() {
try {
while(true) {
System.out.println("실행 중...");
Thread.sleep(1);
}
} catch(InterruptedException e) {}
System.out.println("자원 정리");
System.out.println("실행 종료");
}
}
public class ExampleMain {
public static void main(String[] args) {
Thread thread = new PrintThread2();
thread.start();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {}
thread.interrupt();
}
}
/* 출력
...
...
실행 중...
실행 중...
실행 중...
실행 중...
실행 중...
실행 중...
실행 중...
실행 중...
실행 중...
실행 중...
실행 중...
자원 정리
실행 종료
*/
실행 클래스에서 PrintThread2 스레드를 실행하고, 약 1초 후에 interrupt( ) 메서드를 실행시킵니다.
'Programming > JAVA' 카테고리의 다른 글
멀티 스레드(7) - 데몬 스레드 2 (0) | 2024.12.17 |
---|---|
멀티 스레드(7) - 데몬 스레드 1 (0) | 2024.12.16 |
멀티 스레드(6) - 스레드 상태 제어 6 : 스레드의 안전한 종료 1 (1) | 2024.12.10 |
멀티 스레드(6) - 스레드 상태 제어 5 : 스레드 간 협업 3 (0) | 2024.12.09 |
멀티 스레드(6) - 스레드 상태 제어 5 : 스레드 간 협업 2 (4) | 2024.12.07 |