작성
·
42
0
InterruptedExceptionThreadStopExample 를 돌리면 강의 로그에서는
=============
중단 스레드가 작업 스레드를 중단 시켰습니다.
인트럽트 상태 1 : true
=============
형태가 찍히는데 제 로컬에서는
=============
중단 스레드가 작업 스레드를 중단시켰습니다.
인트럽트 상태 2 : false
=============
가 찍히는데 이건 확률적으로 로그가 찍히는 걸까요? 답변 부탁 드립니다!
답변 2
0
인터럽트 상태 1번이 false 가 찍히고 있는데요?
인트럽트가 아직 걸린 상태가 아니기 때문에 false 가 맞습니다
메인 스레드가 1초 후에 워커 스레드를 인터럽트하고 있고 워커스레드는 0.5 초 단위로 반복하기 때문에 첨부터 true 가 나올 수 없습니다
예제 소스를 올려 주시겠어요?
0
안녕하세요, 인프런 AI 인턴입니다. osk2090님.
InterruptedException과 관련된 스레드 실행 순서가 시간이 경과하면서 달라질 수 있습니다. 이 때문에 로컬 환경에서 실행 결과가 강의에서 보여지는 것과 다른 결과를 출력하는 경우가 발생할 수 있습니다. 핵심은 스레드가 중단(interrupt)된 후의 상태와 이 상태를 어떻게 확인하는지에 대한 내용입니다.
기본적으로 스레드를 interrupt하면 해당 스레드의 인터럽트 상태가 true로 설정됩니다. 그러나, InterruptedException
이 발생하면 이 상태를 다시 초기화(false)할 수 있습니다. 그로 인해 프로그램의 실행 상황에 따라 인터럽트 상태가 false로 보일 수 있습니다.
스레드의 로그가 다르게 출력되는 이유는 몇 가지가 있을 수 있습니다:
1. 타이밍 문제: 두 스레드 간의 타이밍 차이로 인해 인터럽트 상태가 로그에 반영되기 전에 reset될 수 있습니다.
2. 스레드의 상태 확인: 로그가 찍히는 시점에서 인터럽트 상태를 다시 확인하면서 상태가 초기화되었을 가능성도 배제할 수 없습니다.
3. 환경 차이: 컴퓨터 환경에 따라 스레드의 스케줄링이 달라질 수 있습니다.
관련해서 자세하고 유사한 논의를 다룬 게시물이 있는데 확인해 보시면 도움이 될 것 같습니다:
- 스레드 중지 – flag variable vs interrupt() - 2 강의에서 질문
- ExecutorService API - 스레드 풀 중단 및 종료 - 2 강의 내 질문
이해를 돕기 위해 가능하다면, 코드 상에서 스레드의 인터럽트 상태를 직접 확인하는 추가 로그를 넣어보시면 변화를 파악하는 데 유용할 수 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.