-
Java Multithreading [2] - Java에서 Thread를 종료하는 법Java/Multi Threading 기초 2022. 8. 18. 09:02
Java Multithreading
멀티스레딩의 개념과 Java에서의 활용법을 공부하고 정리하는 시리즈입니다.
2. Java에서 Thread를 종료하는 법
Java에서 Thread를 만들고 시작하는 방법을 알아보았으니까 이제 종료하는 법도 알아봐야할 것 같아요.
왜냐면 어떤 경우에는 Thread가 자체적으로 종료되지 않는 로직을 가지고 있을 수 있는데, 단 하나의 Thread만 살아있더라도 어플리케이션은 종료될 수 없기 때문이에요. 실행시킬 수는 있지만 종료시킬 수 없다면 그 어플리케이션은 아주 큰 문제를 가지고 있는 거겠죠!계속해서 실행되고 있다는 것은 메모리와, 운영체제의 자원과, 스케줄링 대상에 계속해서 들어간다는 것이고(상대적으로 다른 작업에 방해가 될 수도 있고), CPU 캐시를 차지하고 있어서 병목현상을 일으킬 수도 있고... 그리고 무엇보다도 종료되지 않는 로직이 개발자가 의도하지 않은 오작동일 수도 있겠죠...!😨
첫번째 방법: Thread#interrupt()
종료하고자 하는 서브 스레드 인스턴스가 있다면 메인스레드에서
서브.interrupt()
와 같이 호출함으로써 멈추도록 할 수 있습니다.interrupt가 호출된 스레드에는
InterruptedException
이라는 예외가 전달되기 때문에, catch로 적절한 종료 처리를 할 수 있습니다.혹은 특정 로직(예를 들어 아주 오랜 시간이 걸릴만한 코드블럭)을 실행하는 쪽에서
if (Thread.currentThread().isInterrupted())
와 같이isInterrupted()
메서드를 사용해서 종료 처리를 분기할 수도 있습니다.두번째 방법: Daemon thread
Deamon Thread 방식은 직접 종료하지 않는 방법입니다. 메인 스레드가 종료될 때 혼자 살아있지 않고 같이 종료되도록 하는 방식이에요. 즉, deamon thread는 애플리케이션의 종료를 방해하지 않습니다. 'deamon'이라는 이름에서 느낄 수 있듯이, 핵심적인 메인 로직보다는 백그라운드에서 돌아가는 작업에 주로 사용됩니다.
사용 방법은 간단한데요. thread를 생성하면서
setDaemon(true)
메서드를 호출해주면 됩니다.다만 첫번째 방식과는 종료 방식에 차이가 있기 때문에 종료에 따른 처리를 하기는 어렵다는 점을 염두해야 합니다.
'Java > Multi Threading 기초' 카테고리의 다른 글
[Java Multithreading] 메모리 영역 - Stack과 Heap (3) 2022.10.25 [Java Multithreading] 성능 최적화의 두 관점 - 처리량과 http 서버 (0) 2022.10.24 Java Multithreading [4] - 성능 최적화의 두 관점 - 지연 시간 (0) 2022.08.29 Java Multithreading [3] - Thread#join() : Thread 간을 조정하는 방법 (0) 2022.08.23 Java Multithreading [1] - Java에서 Thread를 생성하는 법 (0) 2022.08.16 Java Multithreading [0] - 스레드와 프로세스의 차이 (0) 2022.08.12