본문 바로가기

JAVA/자바 스레드 기초

03. 스레드 종료

스레드의 종료는 스스로 종료하는 경우와 다른 스레드에 의해 강제 종료되는 경우가 있다. 스스로 종료했든 강제 종료되었든 종료된 스레드를 다시 살릴 수는 없다. 원한다면 스레드 객체를 다시 생성하고 start()를 호출하여 스레드를 시작시켜야 한다.

 

스스로 종료

스레드는 run()메소드가 종료하거나 리턴하는 경우 종료된다.

 

강제 종료

한 스레드가 다른 스레드를 강제로 종료시키고자 하면, 종료시키고자 하는 스레드 객체의 interrupt() 메소드를 호출하면 된다. main()에 TimerThread 스레드를 생성하고, 강제로 종료시키기 위해서 th.interrupt()를 호출한다. 그 결과 th를 가리키는 TimerThread 스레드에 InterruptedException 예외가 발생한다.

    TimeThread 스레드는 sleep(1000) 실행 중 InterruptedException 예외를 받게 되면, catch 블록에서 return 문을 실행하고, run() 메소드의 종료와 함께 스레드가 종료한다. 만일 TimerThread 의 run() 메소드가 InterruptedException 예외를 처리하는 try-catch 블록을 가지고 있지 않다면, 다른 스레드에서 interrupt()를 호출해도 TimerThread는 종료되지않을것이다.

    정리하면, 스레드A가 스레드B를 강제 종료시키고자 하는 경우 스레드B의 interrupt()를 호출하여야 한다. 물론 이때 스레드B는 sleep()코드와 함께 InterruptedException 예외를 처리하는 try-catch블록을 가지고 있어야 한다. 

'JAVA > 자바 스레드 기초' 카테고리의 다른 글

04. 스레드 동기화  (0) 2024.03.13
02. 자바 스레드 만들기  (0) 2024.03.13
01. 멀티태스킹  (0) 2024.03.13