지금까지 살펴온 내용을 바탕으로 본다면, 스레드는 기본적으로 run( ) 메서드가 모두 실행되고 나면 자동으로 종료하게 되어 있습니다. 하지만, 경우에 따라 run( ) 메서드가 다 실행되지 않았어도 스레드를 즉시 종료할 필요성이 생기기도 합니다(영상 재생이 안 끝났는데 사용자가 중단하는 경우와 같이).
원래 Thread에서는 이런 즉시 종료를 위한 stop( ) 메서드가 제공되었었는데, 현재는 불안정성으로 인해 deprecated 되었습니다. 이를 제외한 스레드 즉시 중단 방법에 대해서 살펴보겠습니다.
○ stop 플래그 사용하기
스레드는 run( ) 메서드가 끝남과 동시에 자동으로 종료되므로, run( ) 메서드의 종료를 유도하는 것이 최선입니다. 이 때, stop이라는 플래그를 ㅇ이용해서 run( ) 메서드의 종료를 유도하게 됩니다.
public class XXXThread extends Thread {
private boolean stop; // stop 플래그 필드
public void run() {
while ( !stop ) {
// 스레드가 반복 실행하는 코드;
}
// 스레드가 사용한 자원 정리
}
}
위와 같은 예시가 있다고 하면, stop이라는 필드가 false인 동안에는 run( )이 실행됩니다. 만일, stop 필드가 true가 되면 while문의 조건이 false가 되므로 while문을 빠져나오게 되고, 자원 정리 후 run( ) 메서드가 끝나게 됨으로써 스레드는 안전하게 종료되는 것입니다.
아래에서 조금 더 구체적인 예제를 살펴보도록 하겠습니다.
// PrintThread1.java
public class PrintThread1 extends Thread {
private boolean stop;
public void setStop(boolean stop) {
this.stop = stop;
}
public void run() {
while(!stop) {
System.out.println("실행 중");
}
System.out.println("자원 정리");
System.out.println("실행 종료");
}
}
public class ExampleMain {
public static void main(String[] args) {
PrintThread1 printThread = new PrintThread1();
printThread.start();
try { Thread.sleep(1000); } catch (InterruptedException e) {}
printThread.setStop(true);
}
}
/* 출력
...
...
실행 중
실행 중
실행 중
실행 중
실행 중
실행 중
실행 중
실행 중
실행 중
실행 중
자원 정리
실행 종료
*/
'Programming > JAVA' 카테고리의 다른 글
멀티 스레드(7) - 데몬 스레드 1 (0) | 2024.12.16 |
---|---|
멀티 스레드(6) - 스레드 상태 제어 6 : 스레드의 안전한 종료 2 (0) | 2024.12.11 |
멀티 스레드(6) - 스레드 상태 제어 5 : 스레드 간 협업 3 (0) | 2024.12.09 |
멀티 스레드(6) - 스레드 상태 제어 5 : 스레드 간 협업 2 (4) | 2024.12.07 |
멀티 스레드(6) - 스레드 상태 제어 5 : 스레드 간 협업 1 (0) | 2024.12.06 |