인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

osk2090님의 프로필 이미지

작성한 질문수

자바 동시성 프로그래밍 [리액티브 프로그래밍 Part.1]

스레드 중지 – flag variable vs interrupt() - 2

InterruptedExceptionThreadStopExample 질문입니다.

작성

·

42

0

InterruptedExceptionThreadStopExample 를 돌리면 강의 로그에서는

=============
중단 스레드가 작업 스레드를 중단 시켰습니다.

인트럽트 상태 1 : true

=============

형태가 찍히는데 제 로컬에서는

=============

중단 스레드가 작업 스레드를 중단시켰습니다.

인트럽트 상태 2 : false

=============

가 찍히는데 이건 확률적으로 로그가 찍히는 걸까요? 답변 부탁 드립니다!

답변 2

0

정수원님의 프로필 이미지
정수원
지식공유자

인터럽트 상태 1번이 false 가 찍히고 있는데요?

인트럽트가 아직 걸린 상태가 아니기 때문에 false 가 맞습니다

메인 스레드가 1초 후에 워커 스레드를 인터럽트하고 있고 워커스레드는 0.5 초 단위로 반복하기 때문에 첨부터 true 가 나올 수 없습니다

예제 소스를 올려 주시겠어요?

0

인프런 AI 인턴님의 프로필 이미지

안녕하세요, 인프런 AI 인턴입니다. osk2090님.

InterruptedException과 관련된 스레드 실행 순서가 시간이 경과하면서 달라질 수 있습니다. 이 때문에 로컬 환경에서 실행 결과가 강의에서 보여지는 것과 다른 결과를 출력하는 경우가 발생할 수 있습니다. 핵심은 스레드가 중단(interrupt)된 후의 상태와 이 상태를 어떻게 확인하는지에 대한 내용입니다.

기본적으로 스레드를 interrupt하면 해당 스레드의 인터럽트 상태가 true로 설정됩니다. 그러나, InterruptedException이 발생하면 이 상태를 다시 초기화(false)할 수 있습니다. 그로 인해 프로그램의 실행 상황에 따라 인터럽트 상태가 false로 보일 수 있습니다.

스레드의 로그가 다르게 출력되는 이유는 몇 가지가 있을 수 있습니다:
1. 타이밍 문제: 두 스레드 간의 타이밍 차이로 인해 인터럽트 상태가 로그에 반영되기 전에 reset될 수 있습니다.
2. 스레드의 상태 확인: 로그가 찍히는 시점에서 인터럽트 상태를 다시 확인하면서 상태가 초기화되었을 가능성도 배제할 수 없습니다.
3. 환경 차이: 컴퓨터 환경에 따라 스레드의 스케줄링이 달라질 수 있습니다.

관련해서 자세하고 유사한 논의를 다룬 게시물이 있는데 확인해 보시면 도움이 될 것 같습니다:
- 스레드 중지 – flag variable vs interrupt() - 2 강의에서 질문
- ExecutorService API - 스레드 풀 중단 및 종료 - 2 강의 내 질문

이해를 돕기 위해 가능하다면, 코드 상에서 스레드의 인터럽트 상태를 직접 확인하는 추가 로그를 넣어보시면 변화를 파악하는 데 유용할 수 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

osk2090님의 프로필 이미지

작성한 질문수

질문하기