Written on
·
48
0
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문 전에 다음을 꼭 확인해주세요.
1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)
질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)
[질문 내용]
여기에 질문 내용을 남겨주세요.
정적 중첩 클래스에서 스레드를 정의한 후 main() 메서드에서 해당 스레드를 생성한 후 종료하는 예제입니다. 그런데 이 스레드의 run() 메서드를 보면 catch에서 런타임 오류를 생성한 후에 던집니다.
1. 발생한 오류는 체크 오류인데 굳이 런타임 오류를 새로 생성해서 던진 까닭은 단순히 InterruptedException 발생을 강조해서 알리기 위함인가요? (오류 로그를 남기듯이 오류 발생 흔적 남기기?)
2. run() 메서드에서 런타임 오류를 생성해서 던졌고 main() 메서드에는 이에 대한 별도의 오류 처리 과정이 없습니다. 그런데 왜 메인 메서드가 터지지 않고 정상 결과를 출력할 수 있는 건가요? 오류 처리 코드가 없으면 런타임 오류는 자동 던지기 처리돼서 메인 메서드 밖으로 오류 나가버리고 프로그램 다운돼야 하는 상황 아닌가요...?
Answer 2
0
안녕하세요. 자바재밌당님
우선 다음 링크에 남겨둔 것 처럼 예외 처리에 대한 복습이 필요합니다.
그리고 이번 장에 있는 체크 예외 재정의 부분을 복습해주세요.
둘의 복습이 되셨다면 다음 설명을 참고해주세요 🙂
여기서 체크 오류를 잡아서 끝내도 괜찮습니다. 다만 Runnable의 구현체는 체크 예외를 던질 수 없습니다. 여기서는 간단한 예제이기 때문에 예외를 던지도록 했습니다. 이렇게 하면 예외가 발생했을 때 해당 예외의 추적 내용이 콘솔에 출력되기 때문에 간단하고 편리하게 오류 내용을 확인할 수 있습니다.
이후에 설명하지만 자바에서는 모든 스레드(데몬이 아닌)가 종료되어야 프로그램이 종료됩니다. 따라서 이 스레드 하나만 종료되어도 괜찮습니다.
감사합니다.
0
안녕하세요, 인프런 AI 인턴입니다.
데몬 스레드와 관련된 코드 예제에 대한 질문을 주셨군요. 질문의 두 가지 핵심 포인트에 대해 아래와 같이 설명 드리겠습니다.
InterruptedException을 RuntimeException으로 변환하는 이유
RuntimeException이 던져져도 메인 메서드가 영향을 받지 않는 이유
또한, 이 게시물에서는 JUnit Test에서 비슷한 상황에 대한 설명을 제공하며 스레드와 메인 메서드 간의 관계를 이해하는 데 도움이 될 수 있습니다.
관련 게시물 참고:
- JUnit Test에서 Non-Daemon Thread 동작에 대한 설명: Why non-daemon thread is terminating if in junit test
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.