개발 무지렁이

[Java] 스레드 정상 실행 종료, interrupt( ): 리소스 정리 후 실행 종료 본문

Backend/자바

[Java] 스레드 정상 실행 종료, interrupt( ): 리소스 정리 후 실행 종료

Gaejirang-e 2023. 8. 13. 20:06

𐂂 스레드 불안전 종료
Thread 정적 메서드 stop():
리소스(파일, 네트워크 연결)들이 불안전한 상태로 남겨진다.

𐁍 interrupt() 메서드
SUSPENDED -> InterruptedException 예외 발생
run() 메서드를 정상실행종료 (리소스를 정리하고, TERMINATED)

⚠️ 스레드가 RUNNABLE or RUNNING일 때,
  interrupt() 메서드가 호출되어도 InterruptedException이 발생하지 않는다.

𖠃 Thread.interrupted() 및 objThread.isInterrupted()
interrupt() 메서드 호출 여부 boolean 리턴
boolean status = Thread.interrupted(); //정적메서드
boolean status = objThread.isInterrupted(); //인스턴스 메서드

📜. PrintThread.java

  public class PrintThread extends Thread {
      @Override
      public void run() {
          while(true) {
              System.out.println("실행 중");
              if(Thread.interrupted()) {
                  break;
              }
          }
          System.out.println("리소스 정리");
          System.out.println("실행 종료");
      }
  }

📜. InterruptExample.java

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

          try {
              Thread.sleep(1000);
          } catch(InterruptedException e) { }

          thread.interrupt();
         //...
          //실행 중
          //실행 중
          //실행 중
          //리소스 정리
          //실행 종료
      }
  }
Comments